【问题标题】:Invalid character in bcpbcp 中的字符无效
【发布时间】:2014-08-19 19:56:03
【问题描述】:

我正在尝试从 c# 调用 BCP 命令。我正在 c# 代码中构建命令,但出现错误。这是我正在构建的 BCP 命令:

string.Format("bcp \"EXEC {0} {1}\" queryout \"{2}\" -c -t\"\0\" -S {3} -U {4} -P {5}", spName, filterList, path, server, user, password);

格式化后的命令如下:

"bcp \"EXEC StatisticsByType @Date='1/1/2013'\" queryout \"\\\\Server\\Folder\\MagicWords.txt\" -c -t\"\0\" -S server.com -U userName -P password"

我得到的错误是:

{"Incorrect syntax near 'queryout'.\r\n'.' is an invalid name because it contains a NULL character or an invalid unicode character."}

我假设它与 .Net 如何转义“”有关。有谁知道传递这些引号的正确方法,或者这是否是问题所在?

编辑:我从 powershell ISE 运行了有问题的 BCP 命令。它引发了“无法打开 BCP 主机数据文件”错误。所以我将 queryout 服务器名称更改为它的映射网络驱动器名称,它工作正常。然而,在 C# 中做同样的事情并没有产生任何变化。

【问题讨论】:

  • 您的查询字符串或文件路径中是否有 CRLF?在我看来,您可能有一个嵌入式 CRLF,并且可能有一个特殊字符显示为“。”
  • 我想我不会。这一切都写在 Visual Studio 中的一行上。我现在正在寻找是否可以验证这一点。

标签: c# sql bcp


【解决方案1】:

我怀疑问题出在分隔符上。序列-t\"\0\" 转换为引号之间的NULL 字符。您可以尝试将\0 替换为另一个分隔符,例如,;。如果您确实希望 NULL 字符作为分隔符,则应在字符串中插入 -t\\0

【讨论】:

  • 我将空分隔符更改为 \\0 并且错误消息已更改!进步!但现在,它只是说“{“'queryout'附近的语法不正确。”}”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 2018-05-19
  • 1970-01-01
  • 2017-02-02
  • 2021-08-15
相关资源
最近更新 更多