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”直接换成具体的数值,就能完成修改。
带有参数下不能修改的问题会是在哪里?
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”直接换成具体的数值,就能完成修改。
带有参数下不能修改的问题会是在哪里?
解决方案:5分
需要确定字符串是否有引号,access和sql操作有点不同,你直接把那段Sql语句放在acess中执行,看看有什么错误。
解决方案:5分
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值
输出这个字符串,看看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值
解决方案:30分
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)的参数是很扯淡的,不管你写什么名称,实际上都是跟 ? 号一样的规则,它根据参数出现的次序来匹配,而不是根据参数名称来匹配的。
{
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)的参数是很扯淡的,不管你写什么名称,实际上都是跟 ? 号一样的规则,它根据参数出现的次序来匹配,而不是根据参数名称来匹配的。