Access数据库。C#的Update带有参数的不能执行

大韩 2016-01-30 12:38:33

sql字符串的Update语句如下:
UPDATE t_subject_list3 SET grade = @grade, subject1_id = @subject1_id, subject2_id = @subject2_id, subject3_bh = @subject3_bh, subject3_title = @subject3_title WHERE ID = @ID
在vs中跟踪断点确定参数都能正确传入进去,就是执行完成后数据没有修改。(测试,如果在sql server数据库就能执行)
我确定各个参数都是有值的。

执行语句具体过程:
OleDbCommand cmd = new OleDbCommand(sql, Connection);
cmd.Parameters.AddRange(values);
return cmd.ExecuteNonQuery();
如果我把参数“@ID”直接换成具体的数值,就能完成修改。

带有参数下不能修改的问题会是在哪里?
...全文
183 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大韩 2016-01-30
  • 打赏
  • 举报
回复
sp1234 真是超级大牛啊,一语道破天机
秋的红果实 2016-01-30
  • 打赏
  • 举报
回复
估计是你的values数组有问题,类型都能对应上吗,参数个数一致吗? 贴出代码看看
  • 打赏
  • 举报
回复
OleDbParameter[] para = new OleDbParameter[] { new OleDbParameter("@ID",sID), new OleDbParameter("@grade", t_subject_list3.Grade), new OleDbParameter("@subject1_id", t_subject_list3.Subject1_id), new OleDbParameter("@subject2_id", t_subject_list3.Subject2_id), new OleDbParameter("@subject3_bh", t_subject_list3.Subject3_bh), new OleDbParameter("@subject3_title", t_subject_list3.Subject3_title) }; 你这类贴出的参数名称排列次序跟sql 语句中的参数次序不符。 Jet引擎(Access)的参数是很扯淡的,不管你写什么名称,实际上都是跟 ? 号一样的规则,它根据参数出现的次序来匹配,而不是根据参数名称来匹配的。
秋的红果实 2016-01-30
  • 打赏
  • 举报
回复
sql里都是字符串,为什么用+? 输出这个字符串,看看sql语句中是不是在哪里少了空格 t_subject_list3.Grade t_subject_list3.Subject1_id t_subject_list3.Subject2_id …… 这些值从哪里来的,断点看看是不是修改后的值,不会是原来的值吧 还有,update语句有返回值,成功更新了,返回修改的行数,失败是-1 int UpdatedRows= DBHelper.ExecuteCommand(sql, para); 如果不是-1,那么一定是执行了,只是你给的值和原来一样 还有,你的数据库里有没有要修改行的ID值
苍穹无痕 2016-01-30
  • 打赏
  • 举报
回复
需要确定字符串是否有引号,access和sql操作有点不同,你直接把那段Sql语句放在acess中执行,看看有什么错误。
大韩 2016-01-30
  • 打赏
  • 举报
回复
string sql = "UPDATE t_subject_list3 " + "SET " + "grade = @grade, " + "subject1_id = @subject1_id, " + "subject2_id = @subject2_id, " + "subject3_bh = @subject3_bh, " + "subject3_title = @subject3_title " + "WHERE ID = @ID"; try { OleDbParameter[] para = new OleDbParameter[] { new OleDbParameter("@ID",sID), new OleDbParameter("@grade", t_subject_list3.Grade), new OleDbParameter("@subject1_id", t_subject_list3.Subject1_id), new OleDbParameter("@subject2_id", t_subject_list3.Subject2_id), new OleDbParameter("@subject3_bh", t_subject_list3.Subject3_bh), new OleDbParameter("@subject3_title", t_subject_list3.Subject3_title) }; DBHelper.ExecuteCommand(sql, para); } // ------------------------------------------------------------- DBhelp.cs ------------------------------ public static int ExecuteCommand(string sql, params OleDbParameter[] values) { OleDbCommand cmd = new OleDbCommand(sql, Connection); cmd.Parameters.AddRange(values); return cmd.ExecuteNonQuery(); } 打断点时,确定sID是有值的,已经传进来了。就是执行后数据库中数据相应记录没有修改

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧