我正在尝试在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();
}
}
*/
答案 0 :(得分:1)
所以,第一件事是第一件事 - 你的SQL代码找不到任何东西,因为它寻找字符串“studentIDTextBox.Text”
你想要“+ studentIDTextBox.Text
其次,直接将字符串放入SQL代码是一种让自己对SQL注入攻击开放的好方法。
否则,你几乎就在那里。
我会选择这样的事情:
string studentName = string.Empty;
while (sr.Read())
{
studentName = sr["StudentName"].toString();
}
lblMyLabel.Text = studentName;
当然,当你没有返回任何数据时,你需要处理。
不要忘记在完成连接后关闭连接。
答案 1 :(得分: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注入攻击
答案 2 :(得分:0)
你不能这样做:
cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = studentIDTextBox.Text";
因为这不会带来价值。你想要这样的东西。
cmdSelect.CommandText = "SELECT * FROM StudentDetails WHERE StudentID = " + studentIDTextBox.Text;
答案 3 :(得分: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();