在c#中执行ExecuteNonQuery()函数时出错

时间:2011-10-13 03:58:35

标签: c# sql ms-access-2007

我正在从c#执行一个Insert语句,其中的值是从我的gui中的TextBox控件中提取的。

我的数据库中只有2列没有空约束

例如:我的insert语句都是VARCHAR字段,包括ssn和dbate是日期类型

insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun','','','','12345','')

如果输入了所有值,但是当我输入空值时,这很正常,我在执行语句时会像上面的语句一样得到Data MisMatch错误。在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();

3 个答案:

答案 0 :(得分:3)

您可能想尝试:

insert into emp (fname,minit,lname,dbate,ssn,sex) values ('arun', NULL, NULL, NULL,'12345', NULL)

检查用户是否输入了某些字符,例如'和 - 它很容易损坏您的语法!!!

OFF-TOPIC但相关:通过直接从文本框中获取您的值,您允许任何人在您的应用程序上注入SQL,因此它是一个缺陷。您可以通过参数化查询来避免它,例如:

SqlCommand cmd = new SqlCommand("select * where Pk = @param1");
cmd.Parameters.Add("@param1", SqlDbType.Int);
cmd.Parameters["@param1"].Value = txtPk.text;

答案 1 :(得分:0)

如果dbdatedate类型,正如您所说的那样,如果type mismatch error中的值不包含适当的文本,则您获得textbox5是正常的格式。例如'10 -12-2011'

答案 2 :(得分:0)

也许您应该考虑在某处对文本框进行验证,以确保它们包含适当的值。 (如果它们是空的,请确保输入string.empty值或应用程序所需的任何默认值。

很难说出来,因为你的代码有点不完整,无法给出更准确的答案。