C# 将Gridview更新为C中的现有sql表#

C# 将Gridview更新为C中的现有sql表#,c#,sql,sql-server,gridview,C#,Sql,Sql Server,Gridview,我正在从excel导出数据并在gridview中显示,当我单击“提交”时,它需要在现有表中更新 下面是我的excel数据 没有。RequestID细分无地块无CUID状态备注 1 5 42 55 55未决 我已成功导出并在Gridview中显示它。现在我想在现有表(Tablename:ParcelInf)中更新相同的内容 下面是我的表格细节 Table ParcelInf( [RequestID] [int] IDENTITY(1,1) NOT NULL, FormattedRequestID

我正在从excel导出数据并在gridview中显示,当我单击“提交”时,它需要在现有表中更新

下面是我的excel数据

没有。RequestID细分无地块无CUID状态备注 1 5 42 55 55未决

我已成功导出并在Gridview中显示它。现在我想在现有表(Tablename:ParcelInf)中更新相同的内容

下面是我的表格细节

Table ParcelInf(
[RequestID] [int] IDENTITY(1,1) NOT NULL,
FormattedRequestID AS ('CUID' + RIGHT('00' + CAST(RequestID AS VARCHAR(10)),10)),
[SubdivisionNo] [nvarchar](20) NOT NULL,
[ParcelNo] [nvarchar](20) NOT NULL,
[Region] [nvarchar](20) NULL,
[City] [nvarchar](20) NULL,
[Zone] [nvarchar](20) NOT NULL,
[CoordinateSystem] [nvarchar](20) NOT NULL,
[CUID] [nvarchar](20) NULL,
[Status] [nvarchar](20) NULL,
[Remarks] [nvarchar](20) NULL,
[UpdateDate] [date] NULL,
[RequestedBy] [nvarchar] (20) NULL,
FOREIGN KEY (RequestID) REFERENCES RequestInf (RequestID)
下面是我的代码

private void BindGrid()
    {
        string Constr = null;
        SqlConnection con;
        SqlCommand cmd;
        string UpdateQuery = null;
        Constr = "Data Source=WIN-A876U316VGA;integrated security=true;Initial Catalog=CUIDinfo";
        con = new SqlConnection(Constr);

        DataTable dtProducts = new DataTable("ParcelInf");

        dtProducts.Columns.Add("Status");
        dtProducts.Columns.Add("Remarks");
        foreach (DataRow DR in dtProducts.Rows)
        {
            con.Open();

            UpdateQuery = "Update ParcelInf Set Status='" + DR["Status"] + "',Remarks='" + DR["Remarks"] + "' where RequestID=" + DR["RequestID"] ;
            cmd = new SqlCommand(UpdateQuery, con);
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            con.Close();
        }

    }


}

它不会抛出任何错误,但不会将数据更新到SQL中检查页面生命周期,我猜您不会在页面上调用BindGrid(),即使在回发时也是如此,因此请确保dtProducts.Rows.Count为零

因此,将此代码添加到页面加载事件:

if (!IsPostBack) BindGrid();
  • 每次创建新对象时,数据表“dtProducts”都是空的
  • 代码见

    DataTable dtProducts = new DataTable("ParcelInf");
    dtProducts.Columns.Add("Status");
    dtProducts.Columns.Add("Remarks");
    foreach (DataRow DR in dtProducts.Rows)
    {
        con.Open();
    
        UpdateQuery = "Update ParcelInf Set Status='" + DR["Status"] + "',Remarks='" + DR["Remarks"] + "' where RequestID=" + DR["RequestID"] ;
        cmd = new SqlCommand(UpdateQuery, con);
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        con.Close();
    }
    
    您没有从表对象的网格中获取任何值。因此循环计数始终为0

    • 调试代码一次并检查行数
    • 请重试填充值,这样会起作用

  • 你有没有仔细阅读过代码?这是winform还是web?datatable dtproducts将没有任何数据,那么如何更新