【问题标题】:How can I manually / programmatically create a DataRow?如何手动/以编程方式创建 DataRow?
【发布时间】:2017-05-16 19:47:20
【问题描述】:

我的项目的代码库有一个旧方法,它将 DataRow 作为参数,我想为其创建一个单元测试方法。

如何手动创建一个 DataRow 对象以传递给该方法? System.Data.DataRow 类没有面向公众的构造函数。

【问题讨论】:

    标签: c# system.data


    【解决方案1】:

    可以通过创建一个新的 DataTable 实例,将与 DataRow 需要具有的“键”对应的列添加到 DataTable 中,然后在 DataTable 上调用 NewRow() 来创建 DataRow。例如:

    DataTable usersTable = new DataTable();
    
    usersTable.Columns.Add("FirstName");
    usersTable.Columns.Add("LastName");
    usersTable.Columns.Add("Email");
    
    DataRow userRow = usersTable.NewRow();
    
    userRow["FirstName"] = "Elmer";
    userRow["LastName"] = "Example";
    userRow["Email"] = "elmer@example.com";
    usersTable.Rows.Add(userRow);
    

    【讨论】:

    • usersTable.Rows.Add(userRow);
    【解决方案2】:

    您应该注意,如果单元测试需要对DataTable 的DataColumnCollection(列)实施类型约束,您可以使用DataColumn 类的重载构造函数来包含预期的Type。

            var dt = new DataTable();
            
            var dc = new DataColumn("Age", typeof(int));
            dt.Columns.Add(dc);
            var dr = dt.NewRow();
    
            dr["Age"] = "test"; // throws an ArgumentException
            //Input string was not in a correct format. Couldn't store<test> in Age Column.  Expected type is Int32.
    
            //should it succeed
            dt.Rows.Add(dr);
    

    【讨论】:

    • 您还需要将此行添加到数据表中。这样做dt.Rows.Add(dr);
    猜你喜欢
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 2013-11-15
    • 2013-12-28
    • 2011-02-10
    • 2011-04-02
    相关资源
    最近更新 更多