用过bcp导入数据的大神请进

kensouterry1 2012-09-26 09:40:09
请教各位大神一个问题,小弟目前在做一个数据导入性能的调优,使用.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求助了!!!
分全数奉上,不够等有了再加,关键想解决问题哈……

...全文
176 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄_瓜 2012-09-27
  • 打赏
  • 举报
回复
在查询分析器里面用
exec master..xp_cmdshell 'bcp............' 执行一下看报什么错误.
南冰 2012-09-27
  • 打赏
  • 举报
回复
.NET 啊
DBA_磊仔 2012-09-26
  • 打赏
  • 举报
回复
--多了个逗号
insert
OPENDATASOURCE(
'SQLOLEDB',
'Data Source=192.168.1.4;User ID=sa;Password=password'
).mydb.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$
DBA_磊仔 2012-09-26
  • 打赏
  • 举报
回复
没有用过BCP导远程,我是用这个
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$
kensouterry1 2012-09-26
  • 打赏
  • 举报
回复
不是很确定,不过在局域网内的访问,我想权限应该不存在太大的问题,除了你的administrator和你的账户文件夹;还有c盘上的几个系统文件夹除外
汤姆克鲁斯 2012-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
文件是可以访问的 我参考过microsoft forum里面的UNC路径那个问题,不是这个原因哈,是bcp被挂起了,
补充一点:昨天我也是远程执行的命令,成功;但今天就不行了,很伤神啊!
[/Quote]
你确定你的问价夹是完全共享的嘛?


试试下面的

\\你的ip\完全共享文件夹\cf.txt
發糞塗牆 2012-09-26
  • 打赏
  • 举报
回复
kensouterry1 2012-09-26
  • 打赏
  • 举报
回复
谢谢你的耐心解答,明天如果问题重现的话 我去公司给你来张截图,帮我分析下,
嘿嘿……
發糞塗牆 2012-09-26
  • 打赏
  • 举报
回复
这个真没试过,如果在SQLServer上执行,应该是2个,两个session,但是前端访问的话。我没环境测试。
kensouterry1 2012-09-26
  • 打赏
  • 举报
回复
文件是可以访问的 我参考过microsoft forum里面的UNC路径那个问题,不是这个原因哈,是bcp被挂起了,
补充一点:昨天我也是远程执行的命令,成功;但今天就不行了,很伤神啊!
kensouterry1 2012-09-26
  • 打赏
  • 举报
回复
问下1楼的哈,如果同时执行两个bcp命令向数据库操作会出现什么情况,但我查看了数据库连接;好像也只有1个。
汤姆克鲁斯 2012-09-26
  • 打赏
  • 举报
回复
sql 操作的文件路径都是基于本地的或者是能够访问的共享文件夹
所以你这种操作是不行的。
發糞塗牆 2012-09-26
  • 打赏
  • 举报
回复
我觉得是不是C#那里设置了超时时间或者SQLServer的超时时间过短?或者你可以直接用xp_cmdshell在SQLServer上执行bcp试试。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧