日期:2014-05-17  浏览次数:20568 次

用过bcp导入数据的大神请进
请教各位大神一个问题,小弟目前在做一个数据导入性能的调优,使用.net开启进程调用bcp命令,调用格式如下:
bcp "Test.dbo.{0}" in d:\Correct.txt -c -S 192.168.0.165 -U sa -P password
测试命令是导入本机相同结构数据库,格式如下:bcp "Test.dbo.{0}" in d:\Correct.txt -c -T
其中{0}占位符是我从DataSet里面取出的所有表名称,向Test数据库中的每张表依次导入数据

这是我程序的调用方法
c# codes:
Process p = null;
try
{
p = new Process();
  p.StartInfo.FileName = "BCP.EXE";
  p.StartInfo.Arguments = String.Format(" \"[{0}].dbo.[{1}]\" in {2} -c -T -t \"|\" ", dbName, tableName, filePath); //设定导入数据库的名称和导入表名称
  p.StartInfo.RedirectStandardInput = true; //重定向标准输入
  p.StartInfo.RedirectStandardOutput = true;
  p.StartInfo.UseShellExecute = false;
  p.StartInfo.RedirectStandardError = true; //重定向错误输出

  p.Start();
while(!p.HasExited)
{
Thread.Sleep(50);
}
  //输出p执行结果
  Console.WriteLine(p.StandardOutput.ReadToEnd());
  p.Dispose();

}
catch
{
p.kill();
}
现在出现了一个问题,当我向远程数据库里面导入文件的时候,进程p承载的bcp.exe会一直等待服务器端响应,从而出现超时;
p.StartInfo.Arguments=bcp "Test.dbo.{0}" in d:\Correct.txt -c -S 192.168.0.165 -U sa -P password
但是我换成本地数据库的时候,导入过程是可以正常执行的;
bcp "Test.dbo.{0}" in d:\Correct.txt -c -T

网上搜索了一大圈,没有找到合适的解决方法,上csdn求助了!!!
分全数奉上,不够等有了再加,关键想解决问题哈……



------解决方案--------------------
我觉得是不是C#那里设置了超时时间或者SQLServer的超时时间过短?或者你可以直接用xp_cmdshell在SQLServer上执行bcp试试。
------解决方案--------------------
这个真没试过,如果在SQLServer上执行,应该是2个,两个session,但是前端访问的话。我没环境测试。
------解决方案--------------------
探讨
文件是可以访问的 我参考过microsoft forum里面的UNC路径那个问题,不是这个原因哈,是bcp被挂起了,
补充一点:昨天我也是远程执行的命令,成功;但今天就不行了,很伤神啊!

------解决方案--------------------
没有用过BCP导远程,我是用这个
SQL code
insert
 OPENDATASOURCE( 
'SQLOLEDB', 
'Data Source=192.168.1.4;User ID=sa;Password=password' 
).,ydb.dbo.tc 
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...sheet1$

------解决方案--------------------
在查询分析器里面用
exec master..xp_cmdshell 'bcp............' 执行一下看报什么错误.