System.Data.SqlClient.SqlException: Invalid column name source error: cmd.ExecuteNonQuery()
System.Data.SqlClient.SqlException: Invalid column name source error: cmd.ExecuteNonQuery()
我有一个可以执行 SQL 插入和更新的网络表单。每次我点击更新我都会得到一个错误
System.Data.SqlClient.SqlException: Invalid column name 'id'
Source error:
Line 133: cmd.ExecuteNonQuery();
这是我的数据库
CREATE TABLE [dbo].[Movie]
(
[MovieId] INT NOT NULL,
[Title] VARCHAR(50) NOT NULL,
[Media] VARCHAR(50) NOT NULL,
[Price] MONEY NOT NULL,
[Qtty] INT NOT NULL,
[Genre] VARCHAR(10) NULL,
PRIMARY KEY CLUSTERED ([MovieId] ASC)
);
C#代码:
protected void OnRowUpdating(object sender, EventArgs e)
{
string id = txtMovId.Text;
string title = txtTitle.Text;
string media = txtMedia.Text;
string price = txtPrice.Text;
string qtty = txtQtty.Text;
string genre = txtGenre.Text;
string query = "UPDATE Movie SET id = @MovieId, title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE id = @MovieId";
string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Parameters.AddWithValue("@MovieId", id);
cmd.Parameters.AddWithValue("@Title", title);
cmd.Parameters.AddWithValue("@Media", media);
cmd.Parameters.AddWithValue("@Price", price);
cmd.Parameters.AddWithValue("@Qtty", qtty);
cmd.Parameters.AddWithValue("@Genre", genre);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
lblUpdateMsg.Visible = true;
}
}
BindGrid();
Response.Redirect(Request.Url.AbsoluteUri);
}
问题有两个:
即使您可以更新主键,将其更新为相同的值也没有用。
您的列名称是 MovieId
,而不是 id
,因此您的 WHERE
子句不正确。
使用此代码:
string query = "UPDATE Movie SET title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE MovieId = @MovieId";
您正在更新原始 table 中不存在的 "Id" 列,因此请按照以下内容替换您的查询 -
字符串查询="UPDATE Movie SET title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE MovieId = @MovieId";
注意:- 您已经传递了正确的参数,但这只是在 SQL 查询中替换正确的列名的问题。
我有一个可以执行 SQL 插入和更新的网络表单。每次我点击更新我都会得到一个错误
System.Data.SqlClient.SqlException: Invalid column name 'id'
Source error:
Line 133: cmd.ExecuteNonQuery();
这是我的数据库
CREATE TABLE [dbo].[Movie]
(
[MovieId] INT NOT NULL,
[Title] VARCHAR(50) NOT NULL,
[Media] VARCHAR(50) NOT NULL,
[Price] MONEY NOT NULL,
[Qtty] INT NOT NULL,
[Genre] VARCHAR(10) NULL,
PRIMARY KEY CLUSTERED ([MovieId] ASC)
);
C#代码:
protected void OnRowUpdating(object sender, EventArgs e)
{
string id = txtMovId.Text;
string title = txtTitle.Text;
string media = txtMedia.Text;
string price = txtPrice.Text;
string qtty = txtQtty.Text;
string genre = txtGenre.Text;
string query = "UPDATE Movie SET id = @MovieId, title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE id = @MovieId";
string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Parameters.AddWithValue("@MovieId", id);
cmd.Parameters.AddWithValue("@Title", title);
cmd.Parameters.AddWithValue("@Media", media);
cmd.Parameters.AddWithValue("@Price", price);
cmd.Parameters.AddWithValue("@Qtty", qtty);
cmd.Parameters.AddWithValue("@Genre", genre);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
lblUpdateMsg.Visible = true;
}
}
BindGrid();
Response.Redirect(Request.Url.AbsoluteUri);
}
问题有两个:
即使您可以更新主键,将其更新为相同的值也没有用。
您的列名称是
MovieId
,而不是id
,因此您的WHERE
子句不正确。
使用此代码:
string query = "UPDATE Movie SET title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE MovieId = @MovieId";
您正在更新原始 table 中不存在的 "Id" 列,因此请按照以下内容替换您的查询 -
字符串查询="UPDATE Movie SET title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE MovieId = @MovieId";
注意:- 您已经传递了正确的参数,但这只是在 SQL 查询中替换正确的列名的问题。