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