【问题标题】:Error on insert: Column name or number of supplied values does not match table definition [closed]插入错误:列名或提供的值的数量与表定义不匹配[关闭]
【发布时间】:2016-04-17 15:37:06
【问题描述】:

当我运行这段代码时,它会返回一个错误。我正在尝试将数据从我的输入表单中获取到我的数据库中

这是表架构:

CREATE TABLE [dbo].[Students] (
  [Id]       INT            IDENTITY (1, 1) NOT NULL,
  [Name]     NVARCHAR (MAX) NOT NULL,
  [Email]    NVARCHAR (MAX) NOT NULL,
  [Password] NVARCHAR (MAX) NOT NULL,
  CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([Id] ASC)
);
con.Open();
SqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT INTO Students VALUES ('"+TextBox1.Text+ "','" +TextBox2.Text+ "','" +TextBox3.Text+ "','" +TextBox4.Text+"')";
cmd.ExecuteNonQuery();
con.Close();

【问题讨论】:

  • 如果您的表有超过 4 列,则需要包含与值相关的列。我不喜欢引用 w3schools 作为来源,但他们有一个简短而简洁的例子 how to write an INSERT statement 双向;包括特定的列以及没有这些列的处理方式。
  • 请提供表定义!否则将您的插入语句重写为“INSERT INTO reg (column1, column2, column3, column4) VALUES ('"+TextBox1.Text+ "','" +TextBox2.Text+ "','" +TextBox3.Text+ "', '" +TextBox4.Text+"')" 最后是用户参数。
  • 值得一提的是你对 sql 注入持开放态度
  • 使用参数并更改您的插入命令声明您想要的确切列INSERT INTO 向我们展示表架构.. 还对如何构建正确的插入命令进行一些基本的谷歌搜索
  • 顺便问一下Guy是谁..?

标签: c# asp.net input contact-form


【解决方案1】:

通过说INSERT INTO 而不列出您希望插入到 SQL 中的字段的名称,假设您正在为行中的每个字段插入一个值。因此,如果您的表格有超过四列,您将收到该错误。

如果这是问题所在,那么您只需要指定要插入的字段,即您需要这种格式的插入语句:

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway')

上面的例子from here

不过,最好使用参数化查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2015-10-20
    • 2022-09-28
    • 2020-11-30
    相关资源
    最近更新 更多