保存查询结果

本文关键字:结果 查询 保存 | 更新日期: 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();
}