2013-11-23 80 views
-2

我试图做一个INSERT语句到SQL,但得到以下错误:数据类型不匹配

there's an error data type mismatch in criteria expression

这是我的查询:

string Query = "INSERT INTO [laptop table] 
(Name,Serial,Charger,Colour,Notes,Exist) 
VALUES 
('" + this.nametxt.Text + "','" + 
    this.serialtxt.Text + "','" + 
    this.chargertxt.Text + "','" + 
    this.colourtxt.Text + "','" + 
    this.notestxt.Text + "','" + 
    this.Exist.Checked.ToString() + "');"; 

有谁知道是什么导致这个?

+0

欢迎来到StackOverflow。请阅读[问]和[常见问题]。如果你没有详细说明你的问题是什么,我们将无法帮助你。 – Marco

+2

噢,我的眼睛 - Yu!如果只有代码使用[*占位符*](http://bobby-tables.com/csharp.html),这个问题*甚至不存在*!因此我的建议是使用占位符。检查* actual *字符串值将会显示SQL语法/输入问题,并且可以在SSMS或其他任何地方使用。 – user2864740

+0

'laptop table'的一个属性可能有非文本数据类型。看看'Serial'。 – collapsar

回答

3

假设:存在列是一个布尔值,您要存储。

问题是最后一列是bit而不是string

这有几个问题,但这是它不工作的主要原因。

另一个主要问题是,你打开自己的SQL注入攻击。看看参数化输入以保护自己。

你可以看看这里

parameterized sql query - asp.net/c#

+0

@ user2864740也许你是正确的 –

+1

我是downvoter,但我看到你已经删除了字符串连接的代码。现在,如果您添加了一个完美的参数化查询示例 – Steve

1

parametising查询,请检查您的表的数据类型。

如果存在列则位输入查询应该像

串查询= “INSERT INTO [膝上型表](名称,序列,充电器,颜色,备注,存在)VALUES('” +此。 nametxt.Text +“','”+ this.serialtxt.Text +“','”+ this.chargertxt.Text +“','”+ this.colourtxt.Text +“','”+ this.notestxt。 Text +“','”+ Convert.ToBoolean(this.Exist.Checked)+“');”;