我还在学习C#的详细信息,所以请原谅我,如果这个基本的话.我一直在寻找答案,但没有找到答案.
我已经声明了局部变量(在我的函数中):
string myVar;
Run Code Online (Sandbox Code Playgroud)
当我尝试返回时,我不断收到错误"使用未分配的局部变量":
return (myVar);
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
public string GetSomethingFromDB()
{
string connectionString;
string sql;
string myVar;
connectionString = "Data Source=MyServer; Port=MyPort; User ID=someuser; Password=mypassword; Database=myDatabase";
sql = "select something from something";
using (AseConnection conn = new AseConnection(connectionString))
{
using (AseCommand cmd = new AseCommand(sql, conn))
{
try
{
conn.Open();
using (AseDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
myVar= reader.GetString("column1").Trim();
}
reader.Close();
reader.Dispose();
}
conn.Close();
conn.Dispose();
cmd.Dispose();
return (myVar);
}
catch (AseException ex)
{
//do some stuff
}
finally
{
//do some stuff
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这与using语句无关,也与while循环有关.抛弃其他一切,这就是问题,实质上:
string myVar;
while (someNonConstantCondition)
{
myVar = someValue;
}
return myVar;
Run Code Online (Sandbox Code Playgroud)
编译器说while循环体可能永远不会执行,因为条件可能是假的.
我建议将代码更改为:
if (reader.Read())
{
return reader.GetString("column1").Trim();
}
Run Code Online (Sandbox Code Playgroud)
...并使用using语句确保所有命令等都自动处理.(你已经得到了那些using语句,这样你就可以删除的来电conn.Close(),conn.Dispose()并cmd.Dispose()反正.)
请注意,这只会从结果中读取第一行,而您当前正在返回最后一行的值.如果这对您很重要,可能会有更大的设计问题.
接下来你需要考虑如果reader.Read()返回会发生什么false......你想抛出异常吗?还有别的吗?通过将return语句直接放在您已设法读取某些数据的位置,如果您无法读取某些数据会发生什么问题更清楚,IMO.
要修复错误更改 -
string myVar = string.Empty;
Run Code Online (Sandbox Code Playgroud)
问题出在这里
while (reader.Read())
{
myVar= reader.GetString("column1").Trim();
}
Run Code Online (Sandbox Code Playgroud)
此部分可能无法运行,myVar可能永远不会被分配,因此错误.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |