2016-05-24 88 views
1

NggSQLバージョン3.1.2を使用してpostgreデータベースの一括挿入操作を実装しようとしましたが、問題が発生しました(メッセージが残っていません) postgreテーブルの列paymentdone(bit(1))データ型のデータ型ミスマッチ。私はbool、char、整数データ型(C#)で試してみましたが、同じエラーが発生しています。NpgSql In BeginBinaryImportを使用してデータを挿入するためのBeginBinaryImport

Code For bulk data insertion 


    public void BulkInsert(string connectionString, DataTable dataTable) 
    { 
     using (var npgsqlConn = new NpgsqlConnection(connectionString)) 
     { 
      npgsqlConn.Open(); 
      var commandFormat = string.Format(CultureInfo.InvariantCulture, "COPY {0} {1} FROM STDIN BINARY", "logging.testtable", "(firstName,LastName,LogDateTime,RowStatus,active,id,paymentdone)"); 
      using (var writer = npgsqlConn.BeginBinaryImport(commandFormat)) 
      { 
       foreach (DataRow item in dataTable.Rows) 
       { 
        writer.WriteRow(item.ItemArray); 
       } 
      } 

      npgsqlConn.Close(); 
     } 
    } 

DataTable Function 

private static void BulkInsert() 
    { 

     DataTable table = new DataTable(); 
     table.Columns.Add("firstName", typeof(String)); 
     table.Columns.Add("LastName", typeof(String)); 
     table.Columns.Add("LogDateTime", typeof(DateTime)); 
     table.Columns.Add("RowStatus", typeof(int)); 
     table.Columns.Add("active", typeof(bool)); 
     table.Columns.Add("id", typeof(long)); 
     table.Columns.Add("paymentdone", typeof(bool)); 
     var dataRow = table.NewRow(); 
     dataRow[0] = "Test"; 
     dataRow[1] = "Temp"; 
     dataRow[2] = DateTime.Now; 
     dataRow[3] = 1; 
     dataRow[4] = true; 
     dataRow[5] = 10; 
     dataRow[6] = true; 
     table.Rows.Add(dataRow); 

     BulkInsert(ConfigurationManager.ConnectionStrings["StoreEntities"].ConnectionString, table); 
    } 

答えて

1

Npgsqlのブールを見たときに、そのデフォルトはPostgreSQLのブール値ではなくBIT(1)に送信することですので、これはおそらく起こっています。バイナリCOPYを使用する場合は、PostgreSQLが予期するタイプを正確に記述する必要があります。

おそらく、ブール値の代わりに.NET BitArrayを使用することをお勧めします。 NpgsqlはそのタイプからPostgreSQL BIT()を推測し、すべてがうまくいくはずです。

しかし、より安全な解決策は、単にStartRow()を呼び出し、次にNpgsqlDbTypeを受け入れるWrite()のオーバーロードを使用することです。これにより、どのPostgreSQLタイプを送信するかを明白に指定することができます。

+0

ありがとうございます –

関連する問題