select的结果集如何导为txt(或变量)

Chiff 2009-03-26 08:16:23
如题,如何将select的结果,导成一个字符串变量,多个字段之间以TAB符分隔;每一行末尾加换行符。
因为每次处理往往上万行,所以要求不能使用循环逐行逐列处理。
...全文
178 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chiff 2009-03-27
  • 打赏
  • 举报
回复
UP下
Chiff 2009-03-26
  • 打赏
  • 举报
回复
会结的。我只想知道还有没有其他方法供参考。
yangpeiyu 2009-03-26
  • 打赏
  • 举报
回复
。。。。楼上都说明了方法了。可以直接结了它吧。。
Chiff 2009-03-26
  • 打赏
  • 举报
回复
哦,明白了。
帖子先留这了,看看还有没有朋友回复
jie3614 2009-03-26
  • 打赏
  • 举报
回复
是的 可以这么说
我们的在***.fmt文件里规定了,从第几个字符到第几个字符对应着放在表中哪个列
例如第一个字符到第十个字符 放到ID列……
Chiff 2009-03-26
  • 打赏
  • 举报
回复
也就是说你的分隔符用的不是tab呗。以空格的数量?还是以<标注>啊?
jie3614 2009-03-26
  • 打赏
  • 举报
回复
***.fmt 这个文件是一个XML文件 定义了数据之间分割的方式 是以空格的数量来定义数据的分割方式的

我这样说能明白吧
Chiff 2009-03-26
  • 打赏
  • 举报
回复
多谢jie3614,
顺便问你个问题,在你们的项目中如何解决字段值中包含tab符呢?导入时会不会导致字段移位?
jie3614 2009-03-26
  • 打赏
  • 举报
回复
补充:
bcp的执行效率是非常高的 不到3秒钟可以处理2.8w条数据 在刚刚做完的项目里用到过
不过是跟楼主的情况相反 是将.txt文件导到数据库表中

代码如下

//BCP -- Bulk Insert
System.Diagnostics.Process bcpPrc = new System.Diagnostics.Process();
bcpPrc.StartInfo.FileName = "cmd.exe";
string bcloadingSource = string.Empty, bcploadingDB = string.Empty, bcploadingUser = string.Empty,bcploadingPassword = string.Empty;

string bcpArgments="";
bcpArgments = @"/C " + driverLetter + " && cd " + workingFolder + " && dir && bcp " + bcploadingDB + ".dbo.*** in " + bcpFileName + " -f ***.fmt -m -S" + bcloadingSource + " -U" + bcploadingUser + " -P" + bcploadingPassword + " && exit";

bcpPrc.StartInfo.Arguments = bcpArgments;
bcpPrc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
bcpPrc.StartInfo.CreateNoWindow = true;
bcpPrc.StartInfo.UseShellExecute = false;
bcpPrc.StartInfo.RedirectStandardOutput = true;

//ready for starting BCP process
bcpPrc.Start();

bcpPrc.WaitForExit(900000); //set waiting time to 15 minutes
bcpPrc.Close();
wenblue7 2009-03-26
  • 打赏
  • 举报
回复
up
Chiff 2009-03-26
  • 打赏
  • 举报
回复
用BCP似乎还还有个不足,就是得写循环判断语句是否执行完毕。当查询非常频繁时,估计会损失一些效率。
Chiff 2009-03-26
  • 打赏
  • 举报
回复
我用的这个测试了,是可以的:
bcp "select" queryout "文件名" -c -q -S"服务器" -U"用户名" -P"密码"
期待更多的方法...
Chiff 2009-03-26
  • 打赏
  • 举报
回复
我测了一下,应该是个不错的方案。
不过如果查询频繁,我不想将所有的查询都导为文件再从文件读取,另外我还想将数据查出来后进行一些批量处理。
这样的话各位还有没有别的办法?
jie3614 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cppfaq 的回复:]
直接使用BCP。

C# codeProcess pc=new Process();
pc.StartInfo.FileName="bcp.exe";
pc.StartInfo.Arguments="bcp \"Northwind.dbo.Orders\" out \"Orders.txt\" -c -q -U\"dboP\"go dba\"";
pc.Start();
[/Quote]

UP 直接使用数据库自带的BCP命令 基本同意1楼的写法
也可以直接在命令行执行 在命令行里直接输入bcp回车 会出现bcp命令的帮助 楼主自己研究一下

bcp \"数据库.表\" out \"目标文件.txt\" -c -q -U \"用户名\" -P \"密码\"
cppfaq 2009-03-26
  • 打赏
  • 举报
回复
直接使用BCP。
Process   pc=new   Process();   
pc.StartInfo.FileName="bcp.exe";
pc.StartInfo.Arguments="bcp \"Northwind.dbo.Orders\" out \"Orders.txt\" -c -q -U\"dboP\"go dba\"";
pc.Start();

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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