0

SQL データベースに 4 列のテーブルがあります。最初の 3 つの列の情報は、別のソースから提供されています。coloum 4 はデフォルトで null に設定されています。

次に、次のコードを使用して、SQL タベースからの情報を入力するデータテーブルを含む win フォームを作成します。

    public DataTable populateFormList()
    {


            SqlConnection con = new SqlConnection(Properties.Settings.Default.sqlConnectionString);
            SqlCommand cmd = new SqlCommand("SELECT * FROM of_formlist_raw", con);
            con.Open();

            SqlDataReader reader = cmd.ExecuteReader();

            DataTable dt = new DataTable();
            dt.Load(reader);

            return dt;
}

datagridview2.DataSource = populateFormList();
datagridview2.Refresh();

これで、データを取得する際に問題なく動作します。

その後、ユーザーは列 4 のヌル値を変更できます。

これらの変更をデータテーブルから SQL テーブルに簡単に書き戻すにはどうすればよいですか?

言い換えれば、画面上のデータテーブルに追加の値がある場合、更新された情報を元の SQL データに格納するにはどうすればよいでしょうか?

ありがとう。

4

2 に答える 2

2

このようなことを試して(DataTable)datagridview2.DataSource、データテーブルとして渡すだけです:

private static void BulkInsertToSQL(DataTable dt, string tableName)
        {

                using (SqlConnection con = new SqlConnection(_DB))
                {
                    SqlBulkCopy sbc = new SqlBulkCopy(con);
                    sbc.DestinationTableName = tableName;

                    //if your DB col names don’t match your data table column names 100%
                    //then relate the source data table column names with the destination DB cols
                    sbc.ColumnMappings.Add("DBAttributeName1", "DTColumnName1");
                    sbc.ColumnMappings.Add("DBAttributeName2", "DTColumnName2");
                    sbc.ColumnMappings.Add("DBAttributeName3", "DTColumnName3");
                    sbc.ColumnMappings.Add("DBAttributeName4", "DTColumnName4");

                    con.Open();

                    sbc.WriteToServer(dt);
                    con.Close();
                }


        }
于 2012-04-20T14:59:40.183 に答える
0

TableAdapter の有無にかかわらず 2 つのオプション。

TableAdapterのMSDNでこれを読むことをお勧めします

彼らは BindingSources も使用しています。これは優れたコンポーネントであり、使いやすいです。

TableAdapter を使用しない場合は、この「コマンド オブジェクトを使用したレコードの更新」の部分をお読みください。

于 2012-04-20T14:52:53.520 に答える