Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存查询结果_C#_Sql_Asp.net - Fatal编程技术网

C# 保存查询结果

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

我有这段代码使用ASP.NET进行web开发,这段代码检索字符串值。当我在
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();

}