为什么我的 bcp 查询不起作用

本文关键字:不起作用 查询 bcp 我的 为什么 | 更新日期: 2023-09-27 18:33:44

我是 C# 的初学者,我想使用 C# 中的 bcp 实用程序,为此,我编写了以下代码:

 string connstr = "Data Source=192.168.50.172;Initial Catalog=CDRDB;User ID=CDRLOGIN;Password=beh1368421"; 
 //string connstr = "Enter your connection string here";
 System.Diagnostics.Process proc = new System.Diagnostics.Process();
 proc.StartInfo.FileName = "bcp";
 proc.StartInfo.Arguments = @"select * from CDRTABLE"" queryout c:'filename.csv -S 192.168.50.172 -U CDRLOGIN -P beh1368421 -f -w";
 proc.Start();

该代码运行,但filename.csv未在我的C:'驱动器上创建。发生了什么事?如何解决这个问题?

为什么我的 bcp 查询不起作用

对于从System.Diagnostics.Process()执行Bcp,应该使用-c-CRAW选项。

下面是示例代码。

string execPath = @"..'bcp.exe";
string localFile = @"MetaData.Table";
string localPath = @"..'OutputFolder";
System.Diagnostics.Process P = new System.Diagnostics.Process();
P.StartInfo.UseShellExecute = false;
P.StartInfo.RedirectStandardOutput = true;
P.StartInfo.RedirectStandardError = true;
P.StartInfo.CreateNoWindow = true;
P.StartInfo.FileName = execPath;
P.StartInfo.Arguments = string.Concat("'"", "MetaData.Table", "'" out '"", localPath, "''", localFile, ".dat'" -c -C RAW -t'"", separator, "'" -S '"", "(local)", "'" -T");
P.Start();
P.WaitForExit();
P.Close();
P.Dispose();

还可以使用 C# 代码中的 BCP,使用BULK INSERT Transact-SQL 语句并使用 ExecuteNonQuery SqlCommand 方法。

如下所示的内容将起作用:

sCommandText = "exec xp_cmdShell 'bcp.exe'"+Database + ".." + TableName + " in "  + 
                 FileName + " -c -q -U " + UserId + " -P " + Password +  "-t  ";
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open(); 
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sCommandText;
return cmd.ExecuteNonQuery();