C# 保存查询结果
我有这段代码使用ASP.NET进行web开发,这段代码检索字符串值。当我在C# 保存查询结果,c#,sql,asp.net,C#,Sql,Asp.net,我有这段代码使用ASP.NET进行web开发,这段代码检索字符串值。当我在string temp上存储该值时,我无法在代码中再次使用temp,我遇到了一个错误: 使用未分配的局部变量“temp” 有人知道为什么吗?类成员变量已初始化,但局部变量未初始化。这就是为什么会出现编译器错误,因此应该初始化并向temp赋值,如下所示: protected void Button1_Click(object sender, EventArgs e) { SqlCommand com,com2
string temp
上存储该值时,我无法在代码中再次使用temp,我遇到了一个错误:
使用未分配的局部变量“temp”
有人知道为什么吗?类成员变量已初始化,但局部变量未初始化。这就是为什么会出现编译器错误,因此应该初始化并向
temp
赋值,如下所示:
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();
}
}
因为如果您的
if
语句的计算结果为false
,则temp
将被取消分配。只需为temp分配一个值即可
string temp = string.Empty;
当您在代码的后面尝试使用temp执行类似操作时,会出现错误
string temp = "";
这是因为您的字符串temp
未确认有值。这意味着,如果if条件if(reader.Read())
未满足,则字符串temp
将保持未分配状态
解决方法是在声明时初始化它,如
string temp;
if (reader.Read())
{
TextBox1.Text = reader["gid"].ToString();
temp = TextBox1.Text;
reader.Close();
}
//do something with temp - error
我并不是说你的实现是错误的或者不是最好的方法——但是我在使用DataTables而不是读卡器时总是更容易使用。然后,您可以传递数据表,并更轻松地在任何地方使用它 我会做这样的事。这只是一个在将来可能会更有用的替代实现。我意识到这里只返回一行,但不管怎样--我发现这个实现是一个更通用的解决方案,特别是如果您创建一个数据访问类,它在传递SQL语句或存储过程后总是返回DataTable 我是为您的特定场景编写的,但理想情况下,您应该创建另一个方法来调用此SQL,并在调用时向您返回一个DataTable 再一次,我想强调的是,您的方式将与上面提到的修复一起工作——但是您肯定应该在将来考虑使用DataTables,我认为您会更喜欢它,并发现总体上更易于使用。您也不会得到现在得到的错误,并且始终可以使用DataTable访问您的数据
string temp = string.Empty;
如果
reader.Read()
未执行该if块,则只将赋值给temp
。将其初始化为null
或string.Empty
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();
}