C# ExecuteOnQuery不';t在使用绑定变量时更新我的表
我在c#中使用以下代码来更新我的表:C# ExecuteOnQuery不';t在使用绑定变量时更新我的表,c#,.net,oracle,C#,.net,Oracle,我在c#中使用以下代码来更新我的表: public static int updateMytable(string accessCode, string response) { OracleConnection conn = DB.GetConnection(); conn.Open(); OracleCommand cmd = new OracleCommand(); cmd.Connection = conn;
public static int updateMytable(string accessCode, string response)
{
OracleConnection conn = DB.GetConnection();
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "update mytable set response_id= :p_response , response_date=sysdate where access_code = :p_access_code";
cmd.Parameters.Add("p_access_code", accessCode);
cmd.Parameters.Add("p_response", response);
cmd.CommandType = CommandType.Text;
int res = cmd.ExecuteNonQuery();
conn.Close();
return res;
}
访问代码为varchar2
当我删除条件“where”时,它会更新所有内容。
当我使用字符串命令而不是绑定变量时,它也可以正常工作
string str = "update mytable set response_id= "+response+" , response_date=sysdate where access_code = "+accessCode;
你能建议吗?添加
cmd.BindByName=true代码>以按名称而非位置绑定变量(:p_response
,:p_access_code
):
您需要按照SQL语句中使用的顺序在命令中添加参数。非常感谢,是的,当我将它们按相同的顺序添加时,效果很好:)putcmd.BindByName=true代码>并且您可以在任何顺序中使用参数非常感谢,当我将参数按cmd.parameters.Add(“p_response”,response)的顺序排列时,它工作得很好;cmd.Parameters.Add(“p_访问代码”,accessCode);
public static int updateMytable(string accessCode, string response) {
if (string.IsNullOrEmpty(accessCode))
return 0;
using (OracleConnection conn = DB.GetConnection()) {
conn.Open();
using (OracleCommand cmd = new OracleCommand()) {
// When binding varaibles, use their names, not positions
cmd.BindByName = true;
cmd.Connection = conn;
cmd.CommandText =
@"update mytable
set response_id = :p_response,
response_date = sysdate
where access_code = :p_access_code";
cmd.Parameters.Add(":p_response", OracleDbType.Varchar2);
cmd.Parameters.Add(":p_access_code", OracleDbType.Varchar2);
cmd.Parameters[":p_response"].Value = string.IsNullOrEmpty(response)
? (object) (DBNull.Value)
: response;
cmd.Parameters[":p_access_code"].Value = accessCode;
return cmd.ExecuteNonQuery();
}
}
}