1

我有一个包含 4 列HouseNoDateTime的数据库IndoorTemp。在我的 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#。提前非常感谢。

4

2 回答 2

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,那么您在演奏时肯定不会。

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

于 2013-05-28T12:21:26.523 回答
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
}
于 2013-05-28T12:19:18.157 回答