1

私はPostgresデータベースを使用して.NET 4.0で作業しているため、Npgsql dllを使用しています。コマンドでSQLファイルを直接実行する方法がどこにも見つからないようです。

-f パラメータを指定して psql.exe を起動したときと同じ効果が得られるはずですが、.NET コードで実行します。

たとえば、次のようになりました。

var cmd = new NpgsqlCommand(conn);
cmd.ExecuteNonQuery("insert into...");

そして、次のようなものが必要です:

var cmd = new NpgsqlCommand(conn);
cmd.ExecuteFile("C:\... .sql");

ファイル全体を読み取ってコマンド文字列として実行することもできましたが、奇妙なことに、同じ効果はありません。

どんな助けでも大歓迎です。

4

1 に答える 1

3

簡単な拡張メソッドを書くだけではどうですか:

public static int ExecuteFile(this NpgsqlCommand cmd, string filename)
{
     string strText = System.IO.File.ReadAllText(filename, System.Text.Encoding.UTF8);
     cmd.CommandText = strText;
     return cmd.ExecuteNonQuery();
}

または、System.Text.Encoding.Default などのカスタム エンコーディングを使用してから、

public static int ExecuteFile(this NpgsqlCommand cmd, string filename, System.Text.Encoding enc)
{
     string strText = System.IO.File.ReadAllText(filename, enc);
     cmd.CommandText = strText;
     return cmd.ExecuteNonQuery();
}

名前空間 Npgsql の静的クラスで宣言する場合、追加のインクルードは必要ありません。

于 2013-10-22T07:35:16.490 に答える