protected void Button1_Click(object sender, EventArgs e)
{
SqlCommand com,com2,com3;
string str;
con.Open();
str = "SELECT TOP 1 * FROM [Committee].[dbo].[group] WHERE [Flag] NOT LIKE '1'ORDER BY [GPA] DESC ;";
com = new SqlCommand(str, con);
SqlDataReader reader = com.ExecuteReader();
string temp;
if (reader.Read())
{
TextBox1.Text = reader["gid"].ToString();
temp = TextBox1.Text;
reader.Close();
}
}
我有这个代码使用ASP.NET进行Web开发,此代码检索字符串值。当我将值存储在string temp
上时,我无法在代码中再次使用temp,我收到了错误:
使用未分配的本地变量' temp'。
任何人都知道为什么?
答案 0 :(得分:1)
当您尝试在此类代码中使用temp执行某些操作时,您会收到错误
string temp;
if (reader.Read())
{
TextBox1.Text = reader["gid"].ToString();
temp = TextBox1.Text;
reader.Close();
}
//do something with temp - error
这是因为您确认字符串temp
没有值。这意味着,如果未满足if条件if (reader.Read())
,则字符串temp
将保持未分配状态。
治愈是在你声明时初始化它,比如
string temp = string.Empty;
答案 1 :(得分:0)
类成员变量已初始化,但本地成员不是。这就是为什么你得到编译器错误所以你应该初始化并为temp
分配一个值,如下所示:
string temp = string.Empty;
因为如果您的if
语句评估为false
,则temp
将被取消分配。
答案 2 :(得分:0)
只需为temp
指定一个值string temp = "";
答案 3 :(得分:0)
我并不是说你的实现是错误的或不是最好的方式 - 但是在使用DataTables而不是阅读器时我总是更容易使用。然后你可以传递DataTable并更容易地在任何地方使用它。
我会这样做。只是一种替代实现,您可能会发现将来会更有用。我意识到你只在这里返回一行,但无论如何 - 我发现这个实现是一个更通用的解决方案,特别是如果你要创建一个数据访问类,它总是在传递一个SQL语句或存储过程之后返回一个DataTable。
我是根据您的具体情况编写的,但理想情况下,您会创建另一个方法来调用此SQL并在调用时向您返回DataTable。
同样,我想强调一下你的方法将适用于上面提到的修复 - 但是你应该考虑将来使用DataTables,我想你会更喜欢它,并且发现整体工作更容易。您也不会得到您现在获得的错误,并且始终可以使用DataTable访问您的数据。
C