2013-02-05 52 views
0

我正在使用此代码来更新数据库中表中的“SOME”列。但每次我尝试这样做都会给出错误。DataAdapter.UpdateCommand不工作c#?

未给出一个或多个所需参数的值。

con.Open(); 
SlipDA = new OleDbDataAdapter(); 
string sqlUpdate = "Update tbl_Slip SET [email protected], [email protected], [email protected], [email protected] WHERE [email protected]"; 

SlipDA.UpdateCommand = new OleDbCommand(sqlUpdate, con); 
SlipDA.UpdateCommand.Parameters.AddWithValue("@RaiseBasic", Convert.ToInt32(dRow[4].ToString())); 
SlipDA.UpdateCommand.Parameters.AddWithValue("@OtherDed", Convert.ToInt32(dRow[5].ToString())); 
SlipDA.UpdateCommand.Parameters.AddWithValue("@Arrears", Convert.ToInt32(dRow[7].ToString())); 
SlipDA.UpdateCommand.Parameters.AddWithValue("@Notes", dRow[8].ToString()); 
SlipDA.UpdateCommand.Parameters.AddWithValue("@SlipNo", dRow[0].ToString()); 

SlipDA.UpdateCommand.ExecuteNonQuery(); 
con.Close(); 

该表包含9列,但我只想更新一些。

+0

据INT32 我纠正,但仍然错误(转换。 ToInt32(dRow [0] .ToString()); –

+0

你确认你所有的字符串不是空的吗? – AbZy

+0

是的,我做到了.. –

回答

2

这可能是问题:

的OLE DB .NET提供程序不支持命名参数传递 参数的SQL语句或由 的OleDbCommand调用的存储过程时,CommandType设置为文本。在这种情况下,必须使用 问号(?)占位符。例如:SELECT * FROM Customers WHERE CustomerID =?

来源:this

所以基本上您的查询应该是这样的:

string sqlUpdate = "Update tbl_Slip SET RaiseBasic= ?, OtherDed= ?, Arrears= ?, Notes= ? WHERE SlipNo= ?"; 
+0

那么我如何传递参数? –

+0

@WaqasAli只需按照上面所述更改sqlUpdate即可。其余的代码都很好。 – AbZy

+0

用sqlCommand为我工作.. 10q – oCcSking

0

试试这个

string sqlUpdate = "Update tbl_Slip SET [email protected], [email protected], [email protected], [email protected] WHERE [email protected]"; 

    OleDbCommand UpdateCommand = new OleDbCommand(sqlUpdate, con); 
    UpdateCommand.Parameters.AddWithValue("@RaiseBasic", Convert.ToInt32(dRow[4].ToString())); 
    UpdateCommand.Parameters.AddWithValue("@OtherDed", Convert.ToInt32(dRow[5].ToString())); 
    UpdateCommand.Parameters.AddWithValue("@Arrears", Convert.ToInt32(dRow[7].ToString())); 
    UpdateCommand.Parameters.AddWithValue("@Notes", dRow[8].ToString()); 
    UpdateCommand.Parameters.AddWithValue("@SlipNo", dRow[0].ToString()); 

    con.Open(); 
    UpdateCommand.ExecuteNonQuery(); 
    con.Close();