保存查询结果

时间:2015-09-18 18:55:12

标签: c# sql asp.net

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'。

任何人都知道为什么?

4 个答案:

答案 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