【问题标题】:Data type mismatch in insert statement插入语句中的数据类型不匹配
【发布时间】:2013-11-23 16:11:49
【问题描述】:

我正在尝试在 SQL 中执行插入语句,但出现以下错误:

条件表达式中存在错误数据类型不匹配

这是我的查询:

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() + "');";

有人知道这是什么原因吗?

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读How to Askfaq。如果您不详细说明您的问题所在,我们将无法为您提供帮助。
  • 哇,我的眼睛——呸!如果只使用placeholders的代码,这个问题根本不存在!因此我的建议是使用占位符。检查 actual 字符串值将揭示 SQL 语法/键入问题,并且可以在 SSMS 或其他任何东西中使用。
  • laptop table 的属性之一可能具有非文本数据类型。看看Serial

标签: c# sql


【解决方案1】:

假设:Exists 列是您要存储的布尔值。

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

这有一些问题,但这是它不起作用的主要原因。

另一个主要问题是您让自己处于开放状态,因此 SQL 注入攻击。看看参数化您的输入以保护自己。

您可以在此处查看参数化查询

parameterized sql query - asp.net / c#

【讨论】:

  • 我是反对者,但我看到您已经删除了带有字符串连接的代码。现在,如果您添加一个完美的参数化查询示例
【解决方案2】:

请检查表格的数据类型。

如果 Exist 列是位类型,那么您的查询应该是这样的

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 + "','" + Convert.ToBoolean(this.Exist.Checked ) + "');";

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多