0

質問して申し訳ありませんが、私のような別の状況を読んでも質問を解決できませんでした。

long を持つ配列があり、それをデータベースに挿入する必要があります。データベースには、OGRN - bigint、データ フィールド、Id - int、ID フィールドの 2 つのフィールドしかありません。私はこのようなDataTableを作成しています

        private static DataTable CreateDataTable()
    {
        var result = new DataTable();

        var ogrn = new DataColumn("Ogrn") {DataType = typeof (long), ColumnName = "Ogrn"};
        result.Columns.Add(ogrn);

        var id = new DataColumn("Id") { DataType = typeof(int), ColumnName = "Id", AutoIncrement = true };
        result.Columns.Add(id);
        result.PrimaryKey = new[] { id };
        return result;
    }

私がこれをやった後:

            var dt = CreateDataTable();
            foreach (long ogrn in ogrns)
            {
                var row = dt.NewRow();
                row["Ogrn"] = ogrn;
                dt.AcceptChanges();
            }
            using (var sqlBulkCopy = new SqlBulkCopy(ConnectionString))
            {
                sqlBulkCopy.DestinationTableName = "dbo.ULs";
                sqlBulkCopy.ColumnMappings.Add("Ogrn", "Ogrn");
                sqlBulkCopy.ColumnMappings.Add("Id", "Id");
                sqlBulkCopy.WriteToServer(dt);
            }

では、なぜうまくいかないのでしょうか。私は何か重要なものを見逃していますか?

4

1 に答える 1

7

テーブルに新しい行を追加します。これは、呼び出し時に自動的に行われるものではありませんNewRow();

            var dt = CreateDataTable();
            foreach (long ogrn in ogrns)
            {
                var row = dt.NewRow();
                row["Ogrn"] = ogrn.Ogrn;
                dt.Rows.Add(row); // ADD the new row to the table!
            }
            dt.AcceptChanges();
于 2013-09-11T17:47:33.603 に答える