簡體   English   中英

使用oledbcommand.executeNonQuery()更新MS Access記錄時出現問題,結果未更新

[英]Issue in updating MS Access records using oledbcommand.executeNonQuery(), result not updating

我是第一次在這里發布查詢,因此,請忽略我的格式。

我正在嘗試使用update命令更新.accdb文件,但是oledbcommand.executeNonQuery()結果為0因此結果未在數據庫中更新。

雖然我沒有收到任何錯誤。

這是我在做什么。

string vsql = string.Format("UPDATE DefTask_List SET [Action]=@Action WHERE  [SNo]=@SNo");
vcom.Parameters.AddWithValue("@SNo", row.Cells[0].Value.ToString());
vcom.Parameters.AddWithValue("@Action", comboBox1.Text);

OleDbCommand vcom = new OleDbCommand(vsql, vcon);
vcon.Open();
int k = vcom.ExecuteNonQuery();
vcom.Dispose();
vcon.Close();

請注意, SNo是我的.accdb文件中的一個autonumber ,也使用與我插入和刪除數據相同的方式,但是效果很好。

OleDbCommand不支持命名參數。 唯一的問題是他們的訂單。

OleDbCommand.Parameters屬性

OLE DB .NET Provider不支持用於傳遞參數的命名參數...

因此,將OleDbParameter對象添加到OleDbParameterCollection的順序必須直接對應於命令文本中參數的問號占位符的位置。

這就是為什么你的第一個@ActionOleDbCommand與匹配@SNoAddWithValue@SNo與你相符@ActionAddWithValue

由於您可能沒有這樣的數據,因此將沒有更新操作。

切換參數順序,並使用推薦的.Add方法代替AddWithValue 可能會產生意外的結果。 讀;

還可以使用using語句來處置OleDbConnectionOleDbCommand而不是手動調用.Dispose().Close()方法。

using(OleDbConnection vcon = new OleDbConnection(conString))
using(OleDbCommand vcom = vcon.CreateCommand())
{
    vcom.CommandText = "UPDATE DefTask_List SET [Action]=@Action WHERE [SNo]=@SNo";
    vcom.Parameters.Add("?", OleDbType.VarChar).Value = comboBox1.Text;
    vcom.Parameters.Add("?", OleDbType.Integer).Value = (int)row.Cells[0].Value;
    // I assume your column types are NVarchar2 and Int32
    vcon.Open();
    int k = vcom.ExecuteNonQuery();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM