基于C#中的TextBox值从SQL Server检索数据

时间:2013-05-28 12:14:48

标签: c# sql-server

我有一个包含4列HouseNoDateTimeIndoorTemp的数据库。在我的C#Windows应用程序中,我有4个文本框,每个文本框用于上面的列。

用户在文本框中输入HouseNo,Date和Time值。这里的输入应该是我的SQL Where子句的一部分,其输出为室内温度。然后应该在最后一个文本框中显示。

我使用过这个连接:

    // Create a String to hold the database connection string.
    string sdwConnectionString = @"Data Source=IE1ADTBD5ZL1S\;Initial Catalog=ThermostatData2;Integrated Security=True";

    // Create a connection
    SqlConnection sdwDBConnection = new SqlConnection(sdwConnectionString);

我尝试了一个代码来执行此操作,但它失败了。 我的代码是,

cmd.IndoorTemp = "select * from ThermData where HouseNo = '" + HouseNovalue.Text + "' and Date = '" + Datevalue.Text + "' and Time = '" + Timevalue.Text + "' ";

我如何达到预期的效果。

我是C#的新手并且不太了解。以上所有代码也都是在一些博客的帮助下完成的。

请帮我解决这个问题。还建议一本好书,我可以学习用SQL Server编写C#。非常感谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

using (SqlConnection c = new SqlConnection("your connection string"))
{
    c.Open();

    using (SqlCommand cmd = new SqlCommand("SELECT IndoorTemp FROM ThermData WHERE HouseNo = @HouseNo AND Date = @Date AND Time = @Time")
    {
        cmd.Parameters.AddWithValue("@HouseNo", HouseNovalue.Text);
        cmd.Parameters.AddWithValue("@Date", Datevalue.Text);
        cmd.Parameters.AddWithValue("@Time", Timevalue.Text);

        var indoorTemp = cmd.ExecuteScalar();
        Indoortemp.Text = indoorTemp;
    }
}

在此示例中,您正在构建一个新的SqlConnection,但您正在利用using语句来确保它已正确处理。你正在为SqlCommand做同样的事情。然后,您正在利用参数化语句来确保您不受SQL注入的影响。

  

并且不要回避这种方法,即使它只是一个没有其他人使用的个人项目,因为你练习你的游戏方式。如果您在练习时不使用参数化SQL,那么在游戏时肯定不会。

最后,你正在利用ExecuteScalar返回结果集第一行的第一列 - 这就是你想要的。

答案 1 :(得分:0)

首先使用参数化查询:

var cmd = new SqlCommand("select * from ThermData where HouseNo = @houseno and Date = @date and Time = @time", sdwDBConnection);
cmd.Parameters.AddWithValue("@houseno", HouseNovalue.Text);
cmd.Parameters.AddWithValue("@date", Datevalue.Text);
cmd.Parameters.AddWithValue("@time", Timevalue.Text);

获得你可以做的结果:

sdwDBConnection.Open();
var reader = cmd.ExecuteReader();

if (reader.Read()) //if there is at least one result
{
    //data from reader
    IndoorTemp.Text = reader["IndoorTemp"];  //access value returned for column IndoorTemp
}