在现有DataTable中创建新的DataRow

本文关键字:DataRow 创建 DataTable | 更新日期: 2023-09-27 18:12:01

问候!我正在尝试创建DataRow并将其添加到现有的DataSet/DataTable中。我遇到的问题是表似乎没有正确传播。我知道这个表存在,但它不会给我任何东西,只会给我null作为回报。有什么想法吗?

代码:

var TownDataSet = new DataSet("newDataSet");
var checkDataSet = new DataSet();
var checkDataTable = new DataTable();
var dataTableName = "someDataSet";
checkDataSet = TownDataSet.Clone();
checkDataTable = TownDataSet.Tables[dataTableName];
Console.WriteLine("STEP 4 " + checkDataSet.DataSetName);
Console.WriteLine("STEP 5 " + checkDataSet.Tables.Count);
Console.WriteLine("STEP 6 " + checkDataTable.TableName);

当我进入第6步时出错:

STEP 4 newDataSet
STEP 5 7
DataTableInsertTemp: System.NullReferenceException: Object reference not set to an instance of an object.

在现有DataTable中创建新的DataRow

让我们分析一下:

var TownDataSet = new DataSet("newDataSet");
var checkDataSet = new DataSet();
var checkDataTable = new DataTable();
var dataTableName = "someDataSet";
checkDataSet = TownDataSet.Clone();
checkDataTable = TownDataSet.Tables[dataTableName];

其中:

  • checkDataSet是包含0个表的新数据集
  • checkDataTable是不包含在任何数据集中的新DataTable

因此:

  • TownDataSet。Tables是一个空集合
  • TownDataSet。Tables[dataTableName]为null

试试这个:

   var dataTableName = "someDataSet";
   var TownDataSet = new DataSet("newDataSet");
   var checkDataSet = new DataSet();
   /* add a new DataTable to the DataSet.Tables collection */
   checkDataSet.Tables.Add(new DataTable(dataTableName));
    /* maybe you need to add some columns too */
    checkDataSet.Tables[dataTableName].Columns.Add(new DataColumn("columnA", typeof(int)));
    checkDataSet.Tables[dataTableName].Columns.Add(new DataColumn("columnB", typeof(string)));
    /* create and initialize a new DataRow for the Tables[dataTableName] table */
    var r = TownDataSet.Tables[dataTableName].NewRow();
    r["columnA"] = 1;
    r["columnB"] = "Some value";
    /* add it to the Tables[dataTableName].Rows collection */
    TownDataSet.Tables[dataTableName].Rows.Add(r);

编辑

有几种方法可以将数据库映射到数据集中。我可以给你几个建议:

  • POCO-普通的旧CLR对象。也就是为每个表创建一个实体类,将表的字段映射到类的属性中。

  • 对象关系映射。它是一个将数据库表映射到类中的框架层。C#的实现是NHibernate。

  • ADO。NET表架构。你可以使用ADO。NET功能,可以使用DataAdapter类将数据库的表架构定义导入到数据集中。

这里有一个基本实现:

    DataSet ds = new DataSet();
    ds.Tables.Add(new DataTable("myTable"));
    da.FillSchema(ds.Tables["mytable"], SchemaType.Source);

    var dataTableName = "someDataSet";
    var TownDataSet = new DataSet("newDataSet");
    var checkDataSet = new DataSet();
    /* add a new DataTable to the DataSet.Tables collection */
    checkDataSet.Tables.Add(new DataTable(dataTableName));
    /*
     * Fit the sql statement and the connection string depending on your scenario
     * Set the *Command, *Connection and *DataAdapter actual provider
     */
    SqlCommand cmd = new SqlCommand("select * from myTable");
    SqlConnection conn = new SqlConnection("my connection string");
    SqlDataAdapter da = new SqlDataAdapter();
    cmd.Connection = conn;
    da.SelectCommand = cmd;
    /* that's it: the datatable is now mapped with the corresponding db table structure */
    da.FillSchema(checkDataSet.Tables[dataTableName], SchemaType.Source);