Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C sqldataadapter datatablemapping_C#_Datatable_Sqldataadapter_Columnmappings - Fatal编程技术网

C# C sqldataadapter datatablemapping

C# C sqldataadapter datatablemapping,c#,datatable,sqldataadapter,columnmappings,C#,Datatable,Sqldataadapter,Columnmappings,我有一个查询-从用户中选择PK1 我还有一个名为myTable的datatable,其中有三个int类型的字段 ----------- | myTable | ----------- | field1 | | field2 | | field3 | ----------- 对于查询返回的每一行,我希望将PK1值放入myTable中的field2中,将field1和field3保留为null 这里有一些我到目前为止尝试过的示例代码,但它似乎不起作用。相反,字段PK1作为一个新字段追加到my

我有一个查询-从用户中选择PK1

我还有一个名为myTable的datatable,其中有三个int类型的字段

-----------
| myTable |
-----------
| field1  |
| field2  |
| field3  |
-----------
对于查询返回的每一行,我希望将PK1值放入myTable中的field2中,将field1和field3保留为null

这里有一些我到目前为止尝试过的示例代码,但它似乎不起作用。相反,字段PK1作为一个新字段追加到myTable的末尾

class Program
    {
        static void Main(string[] args)
        {
            string SQL = "SELECT PK1 FROM users";
            SqlConnection connection = new SqlConnection([my connection string]);
            DataTable myTable = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter();

            adapter.SelectCommand = new SqlCommand(SQL, connection);
            myTable.Columns.Add("field1", typeof(Int32));
            myTable.Columns.Add("field2", typeof(Int32));
            myTable.Columns.Add("field3", typeof(Int32));
            DataTableMapping dataMapping = adapter.TableMappings.Add("myTable", "users");
            dataMapping.ColumnMappings.Add("PK1", "field2");

            adapter.Fill(myTable);

            foreach (DataRow row in myTable.Rows)
            {
                Console.WriteLine("------------");
                foreach (DataColumn column in myTable.Columns)
                {
                    Console.WriteLine(column.ColumnName + " : " + row[column]);
                }
            }


            Console.ReadKey();
        }
    }
我的代码中是否存在问题,或者是否有其他方法可以映射字段


就本问题而言,这是一个简化的示例,因为映射字段名比在给定位置插入值更理想。

它添加列是因为您告诉它。您应该使用datamappingColumn功能或table.column.add功能。并非两者都使用,它们是冗余的,可能不是必需的

因此,如果您离开table.column.add

下面是一个如何将列名绑定到表中设置的列的示例,您可以指定它们的显示顺序,也可以使用双引号将它们保留为空,或者使用null将它们设置为null

this.table.AutoSetDataBoundColumnHeaders=true;
this.table.SetDataBindingtable,null,PK1,null

我认为,如果这是您的要求,那么这种方法没有错。 将查询更改为以下内容,则不需要映射

string SQL = "SELECT PK1 as field2 FROM users";

现在是2012年,为什么要使用DataTable?因为我希望能够将数据存储在内存中,并在持久化到第二个DB之前对其进行进一步操作。你有更好的建议吗?我还应该补充一点,这是我的第一个C项目,因此任何提示/备选方案都非常受欢迎,因为这对我来说将是一次学习经历。你可以创建一个类,更好地表示你正在操作的数据,并使用某种类型的ORM来持久化更改。你能给我一个我将如何创建类和对象?DataTable似乎没有这两种方法中的任何一种?Hi-Asif,谢谢-但是问题是我想在field2中插入PK1的值。然而,我的代码将所有三个字段都保留为空,并在我的DataTable末尾添加了一个新的PK1字段感谢Asif-使用它作为解决方法将非常好。谢谢