且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

C#datatable错误'列不属于表'

更新时间:2022-11-02 23:13:55

简化你的代码,然后再试一次:

 DataTable dt =  new  DataTable(); 
dt.Columns.Add( new DataColumn( @Id typeof int )));
DataRow dr = dt.NewRow();
dr [ Id] = 666 ;

你会得到同样的错误。

错误是对的:列'Id'不属于表

列'@Id'确实如此:

 DataTable dt =  new  DataTable(); 
dt.Columns.Add( new DataColumn( @Id typeof int )));
DataRow dr = dt.NewRow();
dr [ @ Id] = 666 ;

工作正常。



因此,通过更改初始名称来匹配您的列:

 DataTable dt =  new  DataTable(); 
dt.Columns.Add( new DataColumn( Id typeof int )));
dt.Columns.Add( new DataColumn( 代码 typeof string )));
dt.Columns.Add( new DataColumn( 说明 typeof string )));
DataRow dr = dt.NewRow();

foreach var i in lkup)
{
dr = dt.NewRow();
dr [ Id] = i.Id.Replace( \ );
dr [ 代码] = i.Code.Replace( \ );
dr [ 描述] = i.Description.Replace( \ );
dt.Rows.Add(dr);
}

或更改用法:

DataTable dt = new DataTable();
dt.Columns.Add( new DataColumn( @ Id typeof int )));
dt.Columns.Add( new DataColumn ( @ Code typeof string )));
dt.Columns.Add( new DataColumn( @ Description typeof string )));
DataRow dr = dt.NewRow();

foreach var i in lkup)
{
dr = dt.NewRow();
dr [ @ Id] = i.Id.Replace( \ );
dr [ @ Code ] = i.Code.Replace( \ );
dr [ @ Description] = i.Description.Replace( \ );
dt.Rows.Add(dr);
}


Hi, I am using the below code to write data from a comma separated file into a SQL Server table and run into the following Error: Column 'Id' does not belong to table.

private string writetotbl(IList<string> records)
{
    string connString = ConfigurationManager.ConnectionStrings["myDBConnString"].ConnectionString;

    try
    {
        var lkup = from record in records
                         let rec = records.Split(',')
                         select new Lookup
                         {
                             Id = rec[0],
                             Code = rec[1],
                             Description = rec[2]
                         };

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("@Id", typeof(int)));
        dt.Columns.Add(new DataColumn("@Code", typeof(string)));
        dt.Columns.Add(new DataColumn("@Description", typeof(string)));
        DataRow dr = dt.NewRow();

        foreach (var i in lkup)
        {
            dr = dt.NewRow();
            dr["Id"] = i.Id.Replace("\"", "");
            dr["Code"] = i.Code.Replace("\"", "");
            dr["Description"] = i.Description.Replace("\"", "");
            dt.Rows.Add(dr);
        }

        using (var conn = new SqlConnection(connString))
        {
            conn.Open();
            using (SqlBulkCopy s = new SqlBulkCopy(conn))
            {
                s.DestinationTableName = "Lookup";
                s.BatchSize = dt.Rows.Count;
                s.BulkCopyTimeout = 0;
                s.ColumnMappings.Add("Id", "Id");
                s.ColumnMappings.Add("Code", "Code");
                s.ColumnMappings.Add("Description", "Description");
                s.WriteToServer(dt);
                s.Close();
            }
            conn.Close();
        }
        return (null);
    }
    catch (Exception ex)
    {
        errmsg = ex.Message;
        return (errmsg);
    }
}



Not sure what might be causing this.

Thank you in advance..

What I have tried:

Could you please help me with ideas. I have all the columns in the file, datatable match the column name in the database table and with appropriate datatype. Not sure how this error pops up.

Simplify your code, and try again with that:
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("@Id", typeof(int)));
DataRow dr = dt.NewRow();
dr["Id"] = 666;

You will get the same error.
And the error is right: "Column 'Id' does not belong to table"
Column '@Id' does though:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("@Id", typeof(int)));
DataRow dr = dt.NewRow();
dr["@Id"] = 666;

Will work fine.

So match your columns up, either by changing the initial names:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Id", typeof(int)));
dt.Columns.Add(new DataColumn("Code", typeof(string)));
dt.Columns.Add(new DataColumn("Description", typeof(string)));
DataRow dr = dt.NewRow();

foreach (var i in lkup)
{
    dr = dt.NewRow();
    dr["Id"] = i.Id.Replace("\"", "");
    dr["Code"] = i.Code.Replace("\"", "");
    dr["Description"] = i.Description.Replace("\"", "");
    dt.Rows.Add(dr);
}

Or changing the usage:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("@Id", typeof(int)));
dt.Columns.Add(new DataColumn("@Code", typeof(string)));
dt.Columns.Add(new DataColumn("@Description", typeof(string)));
DataRow dr = dt.NewRow();

foreach (var i in lkup)
{
    dr = dt.NewRow();
    dr["@Id"] = i.Id.Replace("\"", "");
    dr["@Code"] = i.Code.Replace("\"", "");
    dr["@Description"] = i.Description.Replace("\"", "");
    dt.Rows.Add(dr);
}