2017-09-20 31 views
3

バージョン3.2.5のNPGSQLの助けを借りて、csvファイルの内容をPostgreSQLの表に書き込みます。NPGSQLを使用してcsvファイルの内容をPostgreSQLに書き込むことができない

私のcsvファイルの内容は、私が

Using writer = conn.BeginTextImport("COPY tbl_test (id,value) FROM 'C:/temp/test.csv' DELIMITER ',' CSV HEADER") 

私は私のコードを実行すると、値が私のデータベースに書き込まれますが、コマンドを書くために、次のコマンドを使用して、次の

id, value 
1, 89 
2, 286 
3, 80 
4, 107 

です次のエラーメッセージが表示されます:

Received unexpected backend message CompletedResponse. Please file a bug. 

SQL Shellのすべてが正常に動作するため、問題はNPGSQLによって生成されるようです。ここで

は、私はSQLシェルに使用私のコマンドです:

\COPY tbl_test(id,value) FROM 'C:/temp/test.csv' DELIMITER ',' CSV HEADER; 

は、このメッセージと誰でも他の経験を持っていますか?

+0

実際のCSVファイルを数行追加することをお勧めします。 –

+0

デフォルトの区切り文字はテキスト形式のタブであり、csvのコンマです。したがって、代わりにセミコロンであることを指定する必要があります: 'DELIMITER ';' ' –

+0

これは既に同じ結果で試しましたが、私はそれで私の質問を編集しました。区切り文字を ';'から ' '、' –

答えて

0

回答がgithub issueであるため、APIを間違って使用しています。

クライアント側(Npgsqlアプリが実行されている場所)にCSVファイルがある場合、COPY tbl_test(value) FROM STDINではなくFROM c:\temp\test.csvを使用する必要があります。後者は、csvファイルがPostgreSQLサーバ上にある場合に使用されます。 See the documentation

サーバーにあるファイルをインポートするだけの場合は、COPYコマンドを通常のSQLとして実行して、コマンドを作成してExecuteNonQueryで実行してください。 BeginTextImport APIは使用しないでください。

+0

チップをありがとう。 API関数 'TextImport'を使用せずに動作します。私はちょっと混乱しています。NPGSQLのドキュメントにはヒントがないからです。ドキュメントでは 'TextImport'を使用していますので、これも私が使用した理由です。 –

+0

npgsqlドキュメントのサンプルコードは、 'FROM STDIN'の例とCSVデータがC#で書かれている例をはっきりと示しています。 [COPYのためのPostgreSQLドキュメント](https://www.postgresql.org/docs/current/static/sql-copy.html)では、 'FROM STDIN'とサーバ上のファイルとの違いについて説明しています。 –

関連する問題