0

我正在尝试在 Windows 窗体文本框中输入一个学生 ID,并且我希望相应的标签将文本从 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

所以,第一件事是第一 - 你的 SQL 代码找不到任何东西,因为它正在寻找字符串“studentIDTextBox.Text”

你想要 " + studentIDTextBox.Text

其次,直接将字符串放入 SQL 代码中是一种让自己容易受到 SQL 注入攻击的好方法。

否则,你就快到了。

我会去做这样的事情:

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

    }

lblMyLabel.Text = studentName;

当然,当您没有返回数据时,您需要处理。

完成后不要忘记关闭连接。

于 2013-03-14T14:31:33.807 回答
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 回答
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 回答