SQLテーブル型の問題へのC#一括コピー

c# datagridview sql sqlbulkcopy

質問

C#、.net 4、Visual Studio 2010、およびSQL Server 2008を使用します。

私は現在、次の列を含むNewPeriodParetoというテーブルを持っています:

  • PG nvarchar(50)
  • パートnvarchar(50)
  • セールスフロート
  • LostSalesフロート
  • Pareto6 int
  • p6イメージ
  • Pareto5 int
  • p5画像
  • Pareto4 int
  • p4イメージ
  • Pareto3 int
  • p3イメージ
  • CurrentPareto int
  • pNew Image
  • NewPareto int

以下は、テーブルを埋めるために私のコードです:

private void CreateNewPeriod()
{
        DataSet dsDG = new DataSet();
        DataTable dt = new DataTable();

        dsDG = (DataSet)ParetoGrid.DataSource;
        dt = dsDG.Tables[0];

        string ThetableName = "NewPeriodPareto";
        BulkInsertDataTable(myConn, ThetableName, dt);
}

public static void BulkInsertDataTable(string connectionString, string tableName, DataTable table)
{
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlBulkCopy bulkCopy =
                new SqlBulkCopy
                (
                connection,
                SqlBulkCopyOptions.TableLock |
                SqlBulkCopyOptions.FireTriggers |
                SqlBulkCopyOptions.UseInternalTransaction,
                null
                );

            bulkCopy.DestinationTableName = tableName;
            connection.Open();

            bulkCopy.WriteToServer(table);
            connection.Close();
        }
}

ご覧のとおり、提供されたコードは、データテーブルからデータをコピーしようとします。データテーブルは、マイデータグリッドソースにバインドされています。

以下は私が得るエラーです:

@ bulkCopy.WriteToServer(table);
データソースからのInt32型の指定された値を、指定されたターゲット列の型イメージに変換することはできません。

今私が最初に思ったのは、自分のSQLテーブルのフィールドの1つにタイプが間違って設定されていたことです。何度もチェックした後、間違っているように見えます。

だから、私はこの小さな問題の解決策、あるいは同じ目的を達成するための代替/簡単な方法、つまりプログラムのDataTableからSQLテーブルを埋めることです。

受け入れられた回答

[時間が足りないので、私はあなたにヒントをあげようとしている]

SqlBulkCopyのColumnMappingsを調べる必要があります。これにより、ソースの列をターゲットに明示的にマッピングできます。今のところIDや類似のような余分な列があるかもしれません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ