C# 在c中执行ExecuteOnQuery()函数时出错#
我正在从c#执行一个Insert语句,其中的值是从gui中的TextBox控件提取的 我的数据库中只有两列具有NOTNULL CONSTRAINT 例如:我的insert语句是all areC# 在c中执行ExecuteOnQuery()函数时出错#,c#,sql,ms-access-2007,C#,Sql,Ms Access 2007,我正在从c#执行一个Insert语句,其中的值是从gui中的TextBox控件提取的 我的数据库中只有两列具有NOTNULL CONSTRAINT 例如:我的insert语句是all areVARCHAR字段,包括ssn和dbate是日期类型 insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun','','','','12345','') 如果输入了所有的值,这可以正常工作,但是当我输入空值时,执行语句时会出现数据不匹配
VARCHAR
字段,包括ssn和dbate是日期类型
insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun','','','','12345','')
如果输入了所有的值,这可以正常工作,但是当我输入空值时,执行语句时会出现数据不匹配错误,就像上面的语句一样。在sql2005中直接执行sql时,查询可以正常工作
string myInsertQuery = "INSERT INTO Employee (fname,minit,lname,ssn,bdate,address,sex) values ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "')";
OleDbCommand myCommand2 = new OleDbCommand(myInsertQuery, mycon)
myCommand2.ExecuteNonQuery();
如果
dbdate
是date
类型,正如您所说,如果textbox5
中的值不包含适当格式的文本,则出现类型不匹配错误是正常的。e、 g.“10-12-2011”如果dbdate
是date
类型,正如您所说,如果textbox5
中的值不包含适当格式的文本,则出现类型不匹配错误是正常的。例如“10-12—2011”< /P> < P>也许你应该考虑在某个地方对你的文本框进行验证,以确保它们包含一个适当的值。
(如果它们为空,请确保输入string.empty值或应用程序所需的任何默认值)
很难说清楚,因为你的代码不完整,不能给出更精确的答案。
< P>也许你应该考虑在某处验证你的文本框,以确保它们包含一个适当的值。
(如果它们为空,请确保输入string.empty值或应用程序所需的任何默认值)
否则很难判断,因为您的代码有点不完整,无法给出更精确的答案。您可能需要尝试:
insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun', NULL, NULL, NULL,'12345', NULL)
检查用户是否键入了一些字符,如“和”-这很容易损坏您的语法强>
离题但相关:通过直接从文本框获取值,您允许任何人在您的应用程序上注入SQL,因此这是一个缺陷。您可以通过参数化查询来避免这种情况,例如:
SqlCommand cmd = new SqlCommand("select * where Pk = @param1");
cmd.Parameters.Add("@param1", SqlDbType.Int);
cmd.Parameters["@param1"].Value = txtPk.text;
你可能想试试:
insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun', NULL, NULL, NULL,'12345', NULL)
检查用户是否键入了一些字符,如“和”-这很容易损坏您的语法强>
离题但相关:通过直接从文本框获取值,您允许任何人在您的应用程序上注入SQL,因此这是一个缺陷。您可以通过参数化查询来避免这种情况,例如:
SqlCommand cmd = new SqlCommand("select * where Pk = @param1");
cmd.Parameters.Add("@param1", SqlDbType.Int);
cmd.Parameters["@param1"].Value = txtPk.text;
你有你的c代码的例子吗?表中哪些字段没有空约束?你能粘贴你的代码吗。这样我们就可以看到它了。它的问题是具有空约束。分享你的C#代码。发布代码。调试时,我在myInsertquery中获取字符串,并在salserver上运行它。它工作正常,但我在这里使用的后端是ms Access。你有C#代码的示例吗?表中的哪些字段没有空约束?你可以粘贴你的代码吗。这样我们就可以看到它了。它的问题是具有空约束。分享你的C#代码。发布代码。调试时,我在myInsertquery中获取字符串,并在salserver上运行它。它工作正常,但我在这里使用的后端是ms Access。如果我输入所有值,我不会出错,但如果我不为某些字段(如bdate)输入值,则只会出错。对于可能包含空值的字段,我会输入,当您指定string.empty值或DBNull.value时,应用程序会给出相同的结果?如果我输入所有值,我不会得到错误,但是如果我没有为某些字段(如bdate)输入值,对于可能包含null值的字段,当您指定string.empty值或DBNull.value时,应用程序会给出相同的结果?使用上述参数化示例,您可以说cmd.Parameters[“@param1”]。value=txtPk.Text==string.empty?DBNull.value:(object)txtPk.Text
标记为空的值。确保调试并监视查询生成的最终sql。使用上述参数化示例,您可以说cmd.Parameters[“@param1”]。Value=txtPk.Text==string.Empty?DBNull.Value:(object)txtPk.Text
标记为空的值。一定要调试并监视查询生成的最终sql。