我正在从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();
答案 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)
如果dbdate
是date
类型,正如您所说的那样,如果type mismatch error
中的值不包含适当的文本,则您获得textbox5
是正常的格式。例如'10 -12-2011'
答案 2 :(得分:0)
也许您应该考虑在某处对文本框进行验证,以确保它们包含适当的值。 (如果它们是空的,请确保输入string.empty值或应用程序所需的任何默认值。
很难说出来,因为你的代码有点不完整,无法给出更准确的答案。