2014-11-24 142 views
1

我在這裏發佈查詢第一次,所以請忽略我的格式。使用oledbcommand.executeNonQuery()更新MS Access記錄問題,結果不更新

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

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

這是我在做什麼。

string vsql = string.Format("UPDATE DefTask_List SET [Action][email protected] WHERE [SNo][email protected]"); 
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但這是工作的罰款。

回答

2

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

OleDbCommand.Parameters property

的OLE DB .NET提供程序不支持命名參數傳遞 參數...

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

這就是爲什麼你的第一個@ActionOleDbCommand比賽在你AddWithValue@SNo比賽@SNo在你AddWithValue@Action

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

切換您的參數訂單,並使用.Add方法,而不是AddWithValue。它可能產生意想不到的結果讀;

還可以使用using statement處置您的OleDbConnectionOleDbCommand,而不是手動調用.Dispose().Close()方法。

using(OleDbConnection vcon = new OleDbConnection(conString)) 
using(OleDbCommand vcom = vcon.CreateCommand()) 
{ 
    vcom.CommandText = "UPDATE DefTask_List SET [Action][email protected] WHERE [SNo][email protected]"; 
    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(); 
} 
+0

謝謝..代碼現在工作後,改變命令的順序 – 2014-11-24 12:16:54

+0

@KaranGoel很高興幫助。 – 2014-11-24 12:18:21