要将SQLServer中的资料导入导出,可以使用bcp.exe 。
Bcp.exe 程式为SQLServer提供的一个提供DOS的方式和SQLServer进行交互,进行导入导出资料动作。由于是SQLServer自带的工具,所以效能上还很好,测试过导入50W行的资料,效能很好。
格式说明:
Bcp.exe + 数据库名称 + ".." + 数据表名称 in 要导入资料的路径 + "-c -t, " + -U登录DB的用户名 -S服务器名称 -P密码 -R
参数说明:
-c使用char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符。
-t,表示是用符号"," 为各个栏位的分割符号。
-U 登陆数据库的用户名称
-P 登陆数据的密码
-S 登陆数据库的IP
-R 表示使用本地区域及语言设定进行导入导出动作。
在C# 中只要将 调用Process的类就调用exe就可以了。
ProcessStartInfo psi = new ProcessStartInfo("d:\\test\\bcp.exe", "XXXX..XXXXX in d:\\test\\test_100000.log -c -t\",\" -Usa -P -S\"192.168.0.1\"");
Process proc = Process.Start(psi);
if (proc != null)
{
proc.WaitForExit();
this.ShowStatic(11, "End");
}
如果C# 写的调用程式所在的机器不包括SQLServer的话,可以找一台SQLServer 将里面的bcp.exe Copy 出来就OK了。对了,还需要一些别的文件要一起Copy出来
文件包括
Resources 文件夹\bcp.exe\sqlncli.dll 这3个就可以了。 如果程式的机器不让安装SQLServer, 这是一个很好的选择。
如果程序所在的机器可以安装SQLClient的话,又要导入大量的数据的话,也可以使用
BULK INSERT TABLE FROM '{0}' WITH (FIELDTERMINATOR = '^', ROWTERMINATOR = '\n', FIRSTROW = 1)
这个SQL。