2013-03-14 117 views
0

我想在windows窗體文本框中輸入studentID,並且我想要相應的標籤將label1中的文本更改爲名稱列中的數據。我真的很困惑與代碼,因此下面。如何用列c中的文本替換標籤文本#

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

我猜你正在使用的WinForms? – 2013-03-14 14:33:08

+0

是的,我正在使用通知。 – user2132038 2013-03-14 14:38:27

回答

1

所以,第一件事的第一個 - 你的SQL代碼不會找到任何東西,因爲它尋找字符串 「studentIDTextBox.Text」

你想「+ studentIDTextBox.Text

其次,直接把字符串轉換爲SQL代碼讓自己暴露給SQL注入攻擊的一個非常好的途徑。

否則,你幾乎沒有。

我會去這樣的事情:

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

    } 

lblMyLabel.Text = studentName; 

當然,你需要處理,當你沒有返回數據。

不要忘了在完成它之後關閉連接。

+0

它適用於我,但問題是我在表單上有多個標籤,我想從我的表中獲取數據並替換所有標籤上的文本,那麼數據集會有幫助嗎? – user2132038 2013-03-14 14:45:33

+0

如果您想從數據庫的一個結果中替換標籤的文本。你可以按照上面的例子說lblMyLabel.Text = sr [「MyColumnName']。ToString(); – William 2013-03-14 14:50:11

+0

是的,我做到了.Thnx很多:)但只是想知道如何在這個程序中使用數據集。 – user2132038 2013-03-14 16:13:36

0

你不能做到這一點:

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

因爲這將不放入值。你會想要這樣的事情。

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

+0

This對於SQL注入非常容易 – William 2013-03-14 14:44:49

+1

事實上,我不會親自把SQL放在這樣的代碼中,每次都喜歡使用存儲過程。 – stevepkr84 2013-03-14 14:58:54

+0

同意,但如果你需要快速修復,有時會起作用。 – William 2013-03-14 15:17:29

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注入攻擊

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();