0

クエリがあります-" SELECT PK1 FROM users";

また、myTableint型の3つのフィールドで名前が付けられたデータテーブルがあります。

-----------
| myTable |
-----------
| field1  |
| field2  |
| field3  |
-----------

myTableクエリから返された各行について、フィールド1とフィールド3をnullのままにして、PK1値をフィールド2に入れたいと思います。

これまでに試したサンプルコードをいくつか示しますが、機能していないようです。myTable代わりに、フィールドPK1が新しいフィールドとして末尾に追加されます。

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();
        }
    }

コードに問題がありますか、それともフィールドをマッピングする別の方法がありますか?

これは、この質問の目的のための簡略化された例です。このようなフィールド名のマッピングは、特定の位置に値を挿入するよりも理想的です。

4

2 に答える 2

0

それがあなたの要件であれば、このアプローチに問題はないと思います。クエリを次のように変更すると、マッピングは不要になります。

string SQL = "SELECT PK1 as field2 FROM users";
于 2012-06-11T16:45:34.400 に答える
0

あなたがそうしているので、それは列を追加しています。datamappingColumn 機能または table.column.add 機能の両方を使用する必要はありません。これらは冗長であり、おそらく必要ありません。

したがって、 table.column.add() を残す場合

これは、テーブルに設定した列に列名を「バインド」する方法の例です。表示する順序を指定します。"" 二重引用符で空白のままにするか、null に設定します。 NULL を使用します。

this.table.AutoSetDataBoundColumnHeaders = true; this.table.SetDataBinding(テーブル、ヌル、「PK1」、ヌル);

于 2012-06-11T16:38:11.290 に答える