1

、、、およびの 4 つの列HouseNoを持つデータベースがあります。私の C# Windows アプリケーションには、上記の列に 1 つずつ、合計 4 つのテキスト ボックスがあります。DateTimeIndoorTemp

ユーザーはテキスト ボックスに 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 を使用しないと、実際にプレイするときに使用できなくなります。

最後にExecuteScalar、結果セットの最初の行から最初の列を返すものを利用しています - そしてそれがあなたが望むものです。

于 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 に答える