0

Windows フォームのテキスト ボックスに StudentID を入力しようとしていますが、対応するラベルのテキストを label1 から name 列のデータに変更したいと考えています。私はコードと本当に混乱しているので、次のとおりです。

  private void button1_Click(object sender, EventArgs e)
                {


                    SqlCeConnection conn = new SqlCeConnection(@"Data Source=|datadirectory|databse.sdf");
                    conn.Open();
                    SqlCeCommand cmdSelect = conn.CreateCommand();
                    cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = studentIDTextBox.Text";

                    SqlCeDataReader sr = cmdSelect.ExecuteReader();
                    DataSet sd = new DataSet();



                }
                  /* using (SqlCeDataAdapter dataAdapter = new SqlCeDataAdapter("SELECT * FROM StudentDetails WHERE StudentID = '" + studentIDTextBox.Text.ToString() + "'", conn)
                    {

                        // create the DataSet 
                        DataSet ITIADataSet = new DataSet();
                        // fill the DataSet using our DataAdapter 
                        dataAdapter.Fill();


        }
    }
    */
4

4 に答える 4

1

studentIDTextBox.Textそのようなクエリでは使用できません。テキストとして扱われます。最良の方法は、パラメーター化されたクエリを使用することです

cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = @StudentID";
cmdSelect.Parameters.AddWithValue("@StudentID",studentIDTextBox.Text);
or
cmdSelect.Parameters.Add(new SqlCeParameter("@StudentID",SqlDbType.{YourColumnDataType}){Value = studentIDTextBox.Text}

または簡単な修正

cmdSelect.CommandText = String.Format("SELECT * FROM StudentDetails WHERE StudentID = {0}",studentIDTextBox.Text);

上記は SQL インジェクション攻撃に対して脆弱であることに注意してください

于 2013-03-14T14:33:12.083 に答える
1

したがって、まず最初に、文字列「studentIDTextBox.Text」を探しているため、SQL コードは何も見つけられません。

" + studentIDTextBox.Text が必要です

第二に、文字列を SQL コードに直接配置することは、SQL インジェクション攻撃に対して無防備なままにする非常に良い方法です。

そうでなければ、あなたはほとんどそこにいます。

私は次のようなものに行きます:

string studentName = string.Empty;
    while (sr.Read())
    {
     studentName = sr["StudentName"].toString();

    }

lblMyLabel.Text = studentName;

もちろん、データを返さない場合の処理​​が必要です。

接続が完了したら、接続を閉じることを忘れないでください。

于 2013-03-14T14:31:33.807 に答える
0

あなたはこれを行うことはできません:

cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = studentIDTextBox.Text";

それは値に入らないので。あなたはこのようなものが欲しいでしょう。

cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = " + studentIDTextBox.Text;

于 2013-03-14T14:31:55.727 に答える
0
SqlCeConnection conn = new SqlCeConnection(@"Data Source=|datadirectory|databse.sdf");
            conn.Open();
            SqlCeDataAdapter da = new SqlCeDataAdapter("select MyDesiredValue from StudentDetails where StudentID = " + studentIDTextBox.Text + "", conn);
            DataTable dt = new DataTable();
            da.Fill(dt);
            label1.Text = dt.Rows[0][0].ToString();
于 2013-03-14T14:43:38.933 に答える