问题描述
用access数据库,为什么单独在access运行,没有问题,放到C#里就不成功,请教privatevoidUpdateChecklistQty(intauditId,intDept_Id,stringDsrc){stringqueryString;queryString="updatetbl_pre_auditdeptsetqty_to_inspect=qty_to_inspect-1whereaudit_id=@AuditIDanddept_id=@DeptIDanddept_src=@DeptSrc";OleDbParameter[]parameters={newOleDbParameter("@DeptID",OleDbType.Integer),newOleDbParameter("@DeptSrc",OleDbType.VarChar),newOleDbParameter("@AuditID",OleDbType.Integer)};parameters[0].Value=Dept_Id;parameters[1].Value=Dsrc;parameters[2].Value=auditId;dbObj.RunStatement(queryString,parameters);//runquery}
解决方案
解决方案二:
错误是什么啊?你这样问,别人怎么答?
解决方案三:
不知道错误在哪,就是数据库的值没有变,但是单独在access运行sql语句没有问题
解决方案四:
那你设一个断点看看,要是数据库的值没有变.且你的SQL语句执行没有错.那就是你程序的错.看看程序中的字段和SQL语句中的字段一样不一样.设断点看在哪报错.
解决方案五:
dbObj.RunStatement(queryString,parameters);//runquery此方法的代码贴出来看!
解决方案六:
publicclassJetOle{protectedOleDbConnectionConnection;publicJetOle(stringdbConnectionString);protectedstringConnectionString{get;}publicintRunStatement(stringqueryString,IDataParameter[]parameters);publicDataSetRunStatement(stringqueryString,IDataParameter[]parameters,stringtableName);publicvoidRunStatement(stringqueryString,IDataParameter[]parameters,DataSetdataSet,stringtableName);}
解决方案七:
设断点没有报错阿
解决方案八:
我又重新写了一下,可是数据库值还是没有改到。debug也没报错,在access单独运行sql语句也没问题,怎么放c#里就不行?请教个位问题在哪?privatevoidUpdateChecklistQty(intauditId,intDept_Id,stringDsrc){stringCString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:DocumentsandSettingssunyiDesktopv1.0.0.9PreOpeningAuditClientbinDebugIHG_WindowsApp.mdb";OleDbConnectionconnect=newOleDbConnection(CString);OleDbCommandcmd1=newOleDbCommand("updateTBL_PRE_AUDITDEPTsetQTY_TO_INSPECT=QTY_TO_INSPECT-1whereAUDIT_ID=@AuditIDandDEPT_ID=@DeptIDandDEPT_SRC=@DeptSrc",connect);cmd1.Parameters.Add("@DeptID",OleDbType.VarChar).Value=Dept_Id;cmd1.Parameters.Add("@AuditID",OleDbType.VarChar).Value=auditId;cmd1.Parameters.Add("@DeptSrc",OleDbType.VarChar).Value=Dsrc;connect.Open();cmd1.ExecuteNonQuery();connect.Close();}
解决方案九:
在执行前,设置断点检查intauditId,intDept_Id,stringDsrc三个参数的值是否正确还不行的情况下手工修改下列代码cmd1.Parameters.Add("@DeptID",OleDbType.VarChar).Value=Dept_Id;cmd1.Parameters.Add("@AuditID",OleDbType.VarChar).Value=auditId;cmd1.Parameters.Add("@DeptSrc",OleDbType.VarChar).Value=Dsrc;改为固定值如:cmd1.Parameters.Add("@DeptID",OleDbType.VarChar).Value=1;cmd1.Parameters.Add("@AuditID",OleDbType.VarChar).Value=2;cmd1.Parameters.Add("@DeptSrc",OleDbType.VarChar).Value=3;再试试
解决方案十:
或者改成SQL的方式,执行下
解决方案十一:
又试了一下,我有30几行数据,用这个代码只能改第2行数据的值,其他的都改不了,数据库所有设置都检查了,第2行的数据跟其他的也没什么区别。郁闷
解决方案十二:
我测试了所有数据,只有当Dept_Id=1auditId=1的时候这短代码才好用,怎么回事啊stringCString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=IHG_WindowsApp.mdb";OleDbConnectionconnection=newOleDbConnection(CString);OleDbCommandcmd1=newOleDbCommand("updateTBL_PRE_AUDITDEPTset[QTY_TO_INSPECT]=QTY_TO_INSPECT-1where[AUDIT_ID]=1and[DEPT_ID]=@DIDand[DEPT_SRC]=@DeptSrc",connection);cmd1.Parameters.Add("@DID",OleDbType.Integer).Value=Dept_Id;cmd1.Parameters.Add("@AuditID",OleDbType.Integer).Value=auditId;cmd1.Parameters.Add("@DeptSrc",OleDbType.VarChar).Value=Dsrc;connection.Open();cmd1.ExecuteNonQuery();connection.Close();
解决方案十三:
代码没有错,搞不明白...
解决方案十四:
找到错误了,cmd1.Parameters.Add("@DID",OleDbType.Integer).Value=Dept_Id;cmd1.Parameters.Add("@AuditID",OleDbType.Integer).Value=auditId;这两行位置换一下就好了,晕死
解决方案十五:
帮你顶下
解决方案:
那么麻烦干嘛?直接用值代进去不就可以了.stringCString=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:DocumentsandSettingssunyiDesktopv1.0.0.9PreOpeningAuditClientbinDebugIHG_WindowsApp.mdb";OleDbConnectionconnect=newOleDbConnection(CString);stringsql="updatetbl_pre_auditdeptsetqty_to_inspect=qty_to_inspect-1whereaudit_id="+AuditID+"anddept_id="+DeptID+"anddept_src='"+DeptSrc+"'";OleDbCommandcmd1=newOleDbCommand(sql,connect);connection.Open();cmd1.ExecuteNonQuery();connection.Close();