![](/img/trans.png)
[英]Updating a row in an Access database using OleDb, SQL and VB.NET
[英]SQL Updating in VB.NET using OLEDB
我正在嘗試使用VB.NET和OleDB從XML文件更新Access數據庫。 我正在使用以下代碼,但無法使更新生效。 我沒有收到任何錯誤,但沒有更新發生-盡管.DbType.Int32,它似乎將CRSID視為字符串。 調試輸出顯示所有正確的值,並且使用類似的方法插入SQL也可以正常工作。 如果我對CRSID中的值進行硬編碼,則會更新數據庫,但數據在錯誤的列中LastName包含CRSID,而FirstName包含LastName。 希望有人能幫忙。
For Each drCurrent In dt.Rows
Using cmd As New OleDb.OleDbCommand With
{
.Connection = cn,
.CommandText =
<SQL>
Update NewPMS SET LastName = @LastName, FirstName = @Firstname WHERE CRSID = @CRSID
</SQL>.Value
}
cmd.Parameters.AddRange(New OleDb.OleDbParameter() _
{
New OleDb.OleDbParameter With {.ParameterName = "@CRSID", .DbType = DbType.Int32},
New OleDb.OleDbParameter With {.ParameterName = "@LastName", .DbType = DbType.String},
New OleDb.OleDbParameter With {.ParameterName = "@FirstName", .DbType = DbType.String}
}
)
cmd.Parameters(0).Value = drCurrent("CRSID")
cmd.Parameters(1).Value = drCurrent("LastName")
cmd.Parameters(2).Value = drCurrent("FirstName")
cn.Open()
cmd.ExecuteNonQuery()
cn.Close()
cmd.Parameters.Clear()
End Using
Next
在OleDb中,參數是位置。 他們的名字無法識別。 (請參閱OleDbCommand.Parameters集合上的“ Remarks section
)
@CRSID
的參數占位符顯示為查詢中的最后一個,但第一個OleDbCommand.Parameter被命名,命名並用@CRSID的值填充。
這意味着您所有的參數都用於錯誤的字段或條件,並且最終出現where子句完全錯誤的情況。 該命令使用FirstName的值搜索CRSID字段(當然,它找不到任何匹配項)。
您的sql的正確代碼是
Update NewPMS SET
LastName = @LastName,
FirstName = @Firstname
WHERE CRSID = @CRSID
....
cmd.Parameters.AddRange(New OleDb.OleDbParameter() _
{
New OleDb.OleDbParameter With {.ParameterName = "@LastName", .DbType = DbType.String},
New OleDb.OleDbParameter With {.ParameterName = "@FirstName", .DbType = DbType.String}
New OleDb.OleDbParameter With {.ParameterName = "@CRSID", .DbType = DbType.Int32},
}
)
cmd.Parameters(0).Value = drCurrent("LastName")
cmd.Parameters(1).Value = drCurrent("FirstName")
cmd.Parameters(2).Value = drCurrent("CRSID")
附帶說明,您應該將OleDbCommand的初始化移到循環外,創建空參數並打開連接。 在循環內部,只需設置當前行中參數的值並執行命令即可。 (在循環結束之前,請不要關閉連接)。 這種邏輯更好,沒有副作用,但是如果您有很多行,它可能會帶來稍微更好的性能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.