【问题标题】:System.Data.SqlClient.SqlException: Invalid column name source error: cmd.ExecuteNonQuery()System.Data.SqlClient.SqlException:无效的列名源错误:cmd.ExecuteNonQuery()
【发布时间】:2020-02-09 13:55:33
【问题描述】:

我有一个执行 SQL 插入和更新的网络表单。每次点击更新都会出错

System.Data.SqlClient.SqlException:列名“id”无效

来源错误:
第 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);
    }

【问题讨论】:

  • 将“电影集 id=@MovieId”替换为“电影集 MovieId=@MovieId”?

标签: c# asp.net sql-server webforms


【解决方案1】:

问题有两个方面:

  1. 即使您可以更新主键,将其更新为相同的值也没有用。

  2. 您的列名是MovieId,而不是id,因此您的WHERE 子句不正确。

使用此代码:

string query = "UPDATE Movie SET title = @Title, media = @Media, price = @Price, qtty = @Qtty, genre = @Genre WHERE MovieId = @MovieId";

【讨论】:

    【解决方案2】:

    您正在更新原始表中不存在的“Id”列,因此请按照以下方式替换您的查询-

    字符串查询 = "更新电影集标题 = @Title,媒体 = @Media,价格 = @Price,数量 = @Qtty,流派 = @Genre WHERE MovieId = @MovieId";

    注意:- 您传递了正确的参数,但这只是在 SQL 查询中替换正确的列名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-14
      • 2019-11-02
      • 2016-04-22
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多