-2

我正在尝试使用 C# 和 SQL 命令将表中的一些值保存到文本文件中

sql.connection.Open();
sql.ex = new SqlCommand("EXEC xp_cmdshell 'bcp "SELECT * FROM SRO_VT_SHARD.._RefPackageItem" queryout "textBox1.Text" -T -c '",sql.connection);
sql.ex.ExecuteNonQuery();
sql.connection.Close();

我在我的 C# api 中做到了这一点,但我不知道如何修复SqlCommand文本中的错误?任何人都可以提供所需的修复吗? http://prntscr.com/1b5b2b

4

2 回答 2

3

您将 bcp 命令所需的双引号与将命令与文本框变量分隔所需的双引号自由混合。而且,如您所见,红色波浪线是 VS 的语法检查器用来告诉您它对此不满意的方式。

在 bcp 命令所需的引号前放置一个反斜杠,并添加一个 + 运算符以将文本框的字符串值连接到命令的其余部分

sql.ex = new SqlCommand("EXEC xp_cmdshell 'bcp \"SELECT * FROM SRO_VT_SHARD.._RefPackageItem\" queryout " + 
         textBox1.Text + " -T -c '",sql.connection);

我还要说,构建 Sql 命令的字符串连接是一种非常危险的做法。
当使用普通命令查询和/或更新数据时,我建议绝对避免字符串连接,因为您可能会暴露于 Sql 注入。在这种情况下,我不确定是否可以使用 TextBox1 的内容安装 Sql Injection 命令。

于 2013-06-21T15:21:15.927 回答
0
char b = '"';
string a = string.Format("EXEC xp_cmdshell 'bcp {0}SELECT * FROM SRO_VT_SHARD.._RefPackageItem{0} queryout " + textBox1.Text + " -T -c '",b);
于 2013-06-21T15:21:21.997 回答