2017-09-06 2 views
0

ロードしたいIDを入力してデータベースから値をロードしたい、例がライブラリであるブックID#2の値をテキストボックスにロードするにはコードは機能しますが、データベースまたは最後の行の最後の値のみが表示されますが、入力したブックIDに従いません。ロードする値の特定のIDを入力してデータベースからテキストボックスに値をロードしたい

ex。本1 =ハリー・ポッター、JKローリング。本2 =辞書、不明。 本3 =科学、不明。

ロードブックIDは1ですが、結果はScience、Unknownです。

ここでコード

try 
{ 
    con.Open(); 

    adp = new SqlDataAdapter("SELECT COUNT(*) FROM Bookinfo WHERE BookNumber='" + textBox3.Text + "'", con); 
    dt = new DataTable(); 
    adp.Fill(dt); 

    if (dt.Rows[0][0].ToString() == "1") 
    { 
     cmd2 = new SqlCommand("SELECT * FROM Bookinfo WHERE BookNumber = '" + textBox3.Text + "';", con); 

     using (SqlDataReader read = cmd.ExecuteReader()) 
     { 
      while (read.Read()) 
      { 
       textBox4.Text = (read["DateReceive"].ToString()); 
       textBox5.Text = (read["Class"].ToString()); 
       textBox6.Text = (read["Author"].ToString()); 
       textBox7.Text = (read["BookName"].ToString()); 
       textBox8.Text = (read["Edition"].ToString()); 
       textBox9.Text = (read["Volume"].ToString()); 
       textBox10.Text = (read["Pages"].ToString()); 
       textBox11.Text = (read["Source"].ToString()); 
       textBox12.Text = (read["Price"].ToString()); 
       textBox13.Text = (read["Publisher"].ToString()); 
       textBox14.Text = (read["Year"].ToString()); 
       textBox15.Text = (read["Remarks"].ToString()); 
      } 
     } 

     con.Close(); 

     MessageBox.Show("Book Loaded"); 
    } 
    else 
    { 
     MessageBox.Show("Book doesn't exist"); 
     con.Close(); 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
}; 

だあなたはcmdと呼ばれるSqlCommandオブジェクトに添付SqlReaderからテキストボックスを充填しているあなたに

+2

NverはSQLクエリ文字列を連結します。パラメータを使用します。例[here](http://csharp-station.com/Tutorial/AdoDotNet/Lesson06) – BWA

答えて

1

ありがとうございます。ただし、示されたSqlCommandはcmd2です。あなたは自分があなたと思うものを示していません。

また、while(read.Read)を取り除くと、同じボックスを繰り返し設定するだけです。

もう1つのこと:ADOを直接使用する場合は、あまりにも多くのボイラープラッターコードが書かれているので、Dapperのようなものを使用することをお勧めします。

そして、BWAは次のように述べました。Sqlを連結しないでください。パラメータを使用してSQLインジェクションを回避します。

関連する問題