保存查询结果
本文关键字:结果 查询 保存 | 更新日期: 2023-09-27 18:13:17
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'.
有人知道为什么吗?
当您稍后在代码中尝试使用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;
类成员变量被初始化,但局部变量不被初始化。这就是为什么你得到编译器错误,所以你应该初始化并分配一个值给temp
,像这样:
string temp = string.Empty;
因为如果你的if
语句求值为false
,那么temp
将被取消分配。
直接赋值给temp
string temp = "";
我不是说你的实现是错误的或不是最好的方式-但我总是有更容易使用时,使用数据表而不是阅读器。然后,您可以传递DataTable,并在任何地方更容易地使用它。
我会这样做。这只是您将来可能会发现更有用的替代实现。我意识到您在这里只返回一行,但无论如何,我发现这种实现是一种更通用的解决方案,特别是如果您要创建一个数据访问类,该类在向其传递SQL语句或存储过程后总是返回一个DataTable。
我为你的特定场景写了这个,但理想情况下,你会创建另一个方法来调用这个SQL并在调用时返回一个DataTable给你。
再一次,我想强调你的方法将适用于上面提到的修复——但是你绝对应该在将来考虑使用datatable,我认为你会更喜欢它,并且发现它更容易使用。你也不会得到你现在得到的错误,并且总是可以访问你的数据与DataTable。
protected void Button1_Click(object sender, EventArgs e)
{
SqlCommand com,com2,com3;
SqlDataAdapter adapter = new SqlDataAdapter();
DataTable dt = new DataTable();
string str;
str = "SELECT TOP 1 * FROM [Committee].[dbo].[group] WHERE [Flag] NOT LIKE '1'ORDER BY [GPA] DESC ;";
com = new SqlCommand(str, con);
adapter.SelectCommand = com;
adapter.Fill(dt);
TextBox1.Text = dt.Rows[0]["gid"].ToString();
}