Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Update语句C#Microsoft Access中的一个或多个必需参数没有给定值_C#_Ms Access_Windows Applications - Fatal编程技术网

Update语句C#Microsoft Access中的一个或多个必需参数没有给定值

Update语句C#Microsoft Access中的一个或多个必需参数没有给定值,c#,ms-access,windows-applications,C#,Ms Access,Windows Applications,我不断地得到这个错误,并检查了很多次,以确保一切都是正确的。我认为我所做的一切都是正确的。不知道问题出在哪里。如果有人能帮我,我将不胜感激 _query=string.Format(“更新tblFormOQ集合UIUMWORKERS1={0},UIUMWORKERS2={1},UIUMWORKERS3={2},UISUBJECTWANGES={3},UIEXCESSWANGES={4},UITaxRate={5},UIPREADMED={6},UIPALLATION 7},SWTSObject工

我不断地得到这个错误,并检查了很多次,以确保一切都是正确的。我认为我所做的一切都是正确的。不知道问题出在哪里。如果有人能帮我,我将不胜感激

_query=string.Format(“更新tblFormOQ集合UIUMWORKERS1={0},UIUMWORKERS2={1},UIUMWORKERS3={2},UISUBJECTWANGES={3},UIEXCESSWANGES={4},UITaxRate={5},UIPREADMED={6},UIPALLATION 7},SWTSObject工资={8},SWTax={9},SWTPrepaid={10},SWTMONT1={11},SWTMonth2={13},SWTMONTH,预付费={15},LaneSubject工资={16},LanePrepaid={17},WCHours={18},WC预付费={19},其中BusinessID={20}和年份={21}和季度={22}”员工工资、超额工资、超高税率、预缴罚款、目标工资、税收、预缴工资、月1日、月2日、月3日、月3日、月3日、月3日、月3日、月3日、月3日、月3日、月1日、月1日、月2日、月3日、月3日、月1日、月3日、月3日、月3日、月3日、月3日、月3日、月1日、月3日、月1日、月1日、月3日、月1日、月1日、月3日、月1日、月3日、月3日、月3日、3日、月3日、月3日、3日、3日、3日、3日、3日、3日、3日、3日、3日、3

您有两个问题:

首先,
Year
是Access SQL中的保留字,因此需要将其括在方括号中,以便将其用作列名

此外,您正在使用“动态SQL”构建命令,因此如果数据包含特殊字符(或者您忘记了分隔符,这里的情况似乎就是这样),命令可能会中断。您真的应该使用参数化查询,类似这样的

使用(OleDbCommand cmd=new OleDbCommand())
{
cmd.Connection=conn;
cmd.CommandText="更新tblFormOQ集合UINumWorkers1=?,UINumWorkers2=?,UINumWorkers3=?,UISubject工资=?,UIExcessSweers=?,UIAxRate=?,UIPreadwarded=?,UIPenal=?,SWTSObject工资=?,SWTax=?,SWTPrepaid=?,SWTMonth1=?,SWTMonth2=,SWTMonth3=?,Trimetsubject工资=?,TrimetricPreadwarded=?,LaneSubject工资=?,LanePrepaid=,WCH=,WCPrepaid=?其中BusinessID=?和[年度]=?和季度=?”;
cmd.Parameters.AddWithValue(“?”,_UINumWorkers1);
cmd.Parameters.AddWithValue(“?”,_UINumWorkers2);
cmd.Parameters.AddWithValue(“?”,_UINumWorkers3);
cmd.Parameters.AddWithValue(“?”,_uiSubjectValue);
cmd.Parameters.AddWithValue(“?”,_ui);
cmd.Parameters.AddWithValue(“?”,_UITaxRate);
cmd.Parameters.AddWithValue(“?”,U UIPrepared);
cmd.Parameters.AddWithValue(“?”,_ui);
cmd.Parameters.AddWithValue(“?”,_SWTSObject);
cmd.Parameters.AddWithValue(“?”,_-SWTax);
cmd.Parameters.AddWithValue(“?”,_-SWTPrepaid);
cmd.Parameters.AddWithValue(“?”,_SWTMonth1);
cmd.Parameters.AddWithValue(“?”,第2个月);
cmd.Parameters.AddWithValue(“?”,第3个月);
cmd.Parameters.AddWithValue(“?”,_);
cmd.Parameters.AddWithValue(“?”,_);
cmd.Parameters.AddWithValue(“?”,_-LaneSubject);
cmd.Parameters.AddWithValue(“?”,_LanePrepaid);
cmd.Parameters.AddWithValue(“?”,WCHours);
cmd.Parameters.AddWithValue(“?”,wcu);
cmd.Parameters.AddWithValue(“?”,_Businessid);
cmd.Parameters.AddWithValue(“?”,_年);
cmd.Parameters.AddWithValue(“?”,四分之一);
cmd.ExecuteNonQuery();
}

这个问题的哪一部分对您来说看起来甚至是远程可读的?还要注意的是,您的
catch
块不仅没有必要,而且实际上是有害的。它会丢弃有用的调试信息。如果您只想抛出异常,那么就完全删除
catch
块,然后让异常被抛出。Consider修复你的格式你好David,我刚刚更新了代码,我删除了Catch Block,我保留它只是为了方便留言。这是一个很好的建议。谢谢你!!你好Gord,谢谢你的回复。非常有用。我实际上有6个表单,我一直在使用相同的方法保存,除了我发布的那一个,所有的表单都运行良好。但是,你的方法给了我一个在节省(_SWTax)方面存在问题的领域。我认为我应该采用你的方法,它比我的方法更有效。非常感谢!!