SQL Server插入错误:列名称或提供的值数与表定义不匹配

时间:2013-07-01 11:19:10

标签: c# sql-server-2008 visual-studio-2012

我正在尝试使用Microsoft Visual Studio 2012将数据添加到SQL Server中的表中。但是,它给了我这个错误:

  

SQLException未被用户代码解开   列名或提供的值数与表定义不匹配。

这是我的代码:

protected void btnAdd_Click(object sender, EventArgs e)
{
    con.Open(); // establish a database connection
    SqlCommand cmd = new SqlCommand();
    cmd.Connection = con;
    cmd.CommandText =
        "INSERT INTO Products VALUES (@CatID, @Name, " +
        "@Image, @Description, @Price)";
    cmd.Parameters.Add("@CatID", SqlDbType.Int).Value =
        ddlCategories.SelectedItem.Value;
    cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value =
        txtName.Text;
    cmd.Parameters.Add("@Image", SqlDbType.NVarChar).Value =
        "http://localhost:12345/CAPSTONE/images/" + fuImage.FileName;
    cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value =
        txtDescription.Text;
    cmd.Parameters.Add("@Price", SqlDbType.Decimal).Value =
        txtPrice.Text;
    // saving the image file to your website folder 'Images'
    fuImage.SaveAs(Server.MapPath("~/images/" + fuImage.FileName));
    cmd.ExecuteNonQuery();
    con.Close();
    Response.Redirect("Default.aspx");
}

5 个答案:

答案 0 :(得分:4)

当您使用此方法时,您必须在查询中创建数据库表的所有列(如果它是自动增量,则不要输入Id的值) 在你的情况下

 "INSERT INTO Products VALUES (@CatID, @Name, " +
    "@Image, @Description, @Price)";

您只有5列,CatID不是自动增量值!你必须检查一下是否真的!

您可以选择要通过此查询创建的值

  cmd.CommandText ="INSERT INTO Products (CatID, Name,Image, Description, Price) 
                    VALUES  (@CatID, @Name,@Image, @Description, @Price)";

答案 1 :(得分:3)

仔细检查Products表的主键(我假设您的产品ID),如果它的值设置为自动增量(身份规范> Is Identity = true)

答案 2 :(得分:0)

这意味着您的Products表格的列数多于您在VALUES声明中提供的列数。

(@CatID, @Name, @Image, @Description, @Price)

如果您在management studio中执行查询sp_columns Products,它将列出表格中的所有列。

但是,如果您只想插入这些值,则需要执行以下查询:

INSERT Products (CatID, Name, Image, Description, Price)

如果指定INSERT语句而未指定列名,则需要填充所有列

答案 3 :(得分:0)

使用try catch块,并找出catch中的确切问题,它会说出你遗漏的内容,其余大部分可能的答案已经给出了

答案 4 :(得分:-4)

    private void btninsert_Click(object sender, EventArgs e)
    {
        try
        {
            con.Open();
            cmd = new SqlCommand("insert into Empinfo values ('" + textBox1.Text + "''" + textBox2.Text + "''" + textBox3.Text + "''" + textBox4.Text + "')", con);

            cmd.ExecuteNonQuery();
            MessageBox.Show("Insert the record");
            cmd.Dispose();
        }
        catch(Exception e1)
            {
                MessageBox.Show("e1");
            }
            finally
        {

        con.Close();

    }
    }