1

我正在尝试使用 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");
}
4

5 回答 5

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)";
于 2013-07-01T11:33:31.333 回答
3

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

于 2013-07-26T03:58:32.183 回答
0

这意味着您的Products表的列比您在VALUES语句中提供的列多或少。

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

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

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

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

当您指定一个INSERT语句而不指定列名时,它期望填充所有列

于 2013-07-01T11:24:21.783 回答
0

使用 try catch 块,找出 catch 中的确切问题,它会说出你错过了什么,剩下的大部分可能的答案已经在上面给出了

于 2013-07-01T12:56:54.950 回答
-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();

    }
    }
于 2013-11-13T18:56:32.523 回答