我製作了一個表格,該表格應該可以獲取特定會話的出席詳情。 所使用的元素是:VB.NET:更新來自(CheckedListBox-ComboBox)的MySQL數據庫
1- CheckedListBox
2-組合框:CB_Students
3-按鈕:更新
我的表是學生,其中包含編碼|名字|姓氏|第一天|第2天|第三天|第四天|第5天,其中Days是tinyint類型,指的是Presence或Absence。
我希望用戶從CheckedListBox中檢查學生的姓名,所以我填入CheckedListBox,並在名字和姓氏上拼接,每個項目顯示全名。由於CheckedListBox是間接由數據庫記錄創建,我想我不能直接連接到數據庫,所以我創建了一個隱藏的ComboBox與CheckedListBox中顯示的每個學生對應的代碼值。
例如,我的學生表如下:
代碼| F_Name | L_Name
1 | F1 | L1
2 | F2 | L2
的CheckedListBox包含:F1 L1和F2 L2,和組合框包含1和2
日的數字也被窗體加載過程中發現,並保存爲公共變量查詢。
下面是我的更新按鈕代碼:
Dim j, S As Integer
sqlstr = "UPDATE Student SET Day'" & Inquiry & "'[email protected] WHERE Code='" & CB_Students.Items.Item(j) & "'"
DBCmd = New MySql.Data.MySqlClient.MySqlCommand(sqlstr, DBConn)
With DBCmd
For j = 0 To CheckedListBox1.Items.Count - 1
S = CheckedListBox1.GetItemCheckState(j)
If S = 1 Then
.Parameters.AddWithValue("@field1", 1)
ElseIf S = 0 Then
.Parameters.AddWithValue("@field1", 0)
End If
Next j
End With
DBCmd.ExecuteNonQuery()
DBCmd.Dispose()
但是,在執行過程中,我得到的錯誤:「參數‘@字段1’已經被定義。」
我應該如何處理這個問題? 此外,聲明CB_Students.Items.Item(j)正確使用我的SQL字符串在ComboBox中的學生代碼?
更新1:
查詢是一個整數。我也試過下面的代碼:
For j = 0 To CheckedListBox1.Items.Count - 1
S = CheckedListBox1.GetItemCheckState(j)
If S = 1 Then
With DBCmd
.Parameters.AddWithValue("@field1", 1)
.ExecuteNonQuery()
.Dispose()
End With
ElseIf S = 0 Then
With DBCmd
.Parameters.AddWithValue("@field1", 0)
.ExecuteNonQuery()
.Dispose()
End With
End If
Next j
但同樣,正如我在Never_Mind響應,我得到以下錯誤在第一DBCmd.ExecuteNonQuery()行:「你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊,在''4'= 1'WHERE Code ='6''第1行'附近使用正確的語法。
這些值似乎是正確的。日數爲4,Field1爲1,代碼爲6.我沒有看到問題所在。
更新2:
下面是用於填充CheckedListBox和組合框,這是在形式負載的代碼。 C_Code是班級代碼,是學生表中的另一個字段。ClassID是以前面的形式保存的公共整數變量。此表單使用.ShowDialog方法顯示。
sqlstr = "SELECT * FROM Student WHERE C_Code = '" & ClassID & "'"
DBCmd = New MySql.Data.MySqlClient.MySqlCommand(sqlstr, DBConn)
DBDR = DBCmd.ExecuteReader
While (DBDR.Read())
Std_Name = DBDR("F_Name") & " " & DBDR("L_Name")
CheckedListBox1.Items.Add(Std_Name)
CB_Students.Items.Add(DBDR("Code"))
End While
DBCmd.Dispose()
DBDR.Close()
此外,代碼是整數。
更新3:
我已經改變了查詢的數據類型爲String,並刪除單引號。
無論如何,我在想也許我可以做出不同的字段編號。類似這樣的:
Dim j, S, k As Integer
sqlstr = "UPDATE Student SET D" & Inquiry & " [email protected]" & k & " WHERE Code='" & CB_Students.Items.Item(j) & "' "
DBCmd = New MySql.Data.MySqlClient.MySqlCommand(sqlstr, DBConn)
For j = 0 To CheckedListBox1.Items.Count - 1
For k = 1 To CheckedListBox1.Items.Count
S = CheckedListBox1.GetItemCheckState(j)
If S = 1 Then
With DBCmd
.Parameters.AddWithValue("@field" & k, 1)
.ExecuteNonQuery()
.Dispose()
End With
ElseIf S = 0 Then
With DBCmd
.Parameters.AddWithValue("@field" & k, 0)
.ExecuteNonQuery()
.Dispose()
End With
End If
Next k
Next j
但這不起作用。我認爲在通過命令添加@field和k時,應該會出現錯誤。我怎樣才能使它工作?
我真的很感謝幫助!
Holy Sql注射警戒,蝙蝠俠!你的代碼實際上是乞求被黑客攻擊。更糟糕的是,當你知道使用參數的時候。 – 2013-04-05 20:39:41
@JoelCoehoorn,你是什麼意思? – 2013-04-05 21:34:59