2

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
  • p新規画像
  • 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();
        }
}

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

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

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

今私が最初に考えたのは、SQL テーブルのフィールドの 1 つで型が間違って設定されていたということですが、何度もチェックした後、何も問題はないようです。

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

4

1 に答える 1

1

【せっかくなのでヒントを出します】

SqlBulkCopy の ColumnMappings を調べる必要があります。これにより、ソースの列をターゲットに明示的にマップできます。現在、ID などの余分な列がいくつかある可能性があります。

于 2012-04-30T15:29:16.363 に答える