1

我在 .NET 4.0 中使用 Postgres 数据库,因此使用 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 回答