【问题标题】:Why SQL Server stored procedure doesn't recognize text from Visual Studio?为什么 SQL Server 存储过程无法识别 Visual Studio 中的文本?
【发布时间】:2013-12-20 03:30:03
【问题描述】:

好的。将尝试用图片来解释...这是我的 SQL Server 和我的查询:

如你所见,我得到了结果。但后来我在 VS2013 中启动我的应用程序,当我想调用我的存储过程并从 VS 复制文本时放置断点:

并在 Qhuery 中粘贴名称:

但是我没有得到结果!名字完全一样!

这个查询不起作用:

SELECT TOP 1 [Employee].[EmployeeID]
        FROM [Employee]
        WHERE [Employee].[FullName] = 'Brad Oelmann'

【问题讨论】:

  • 您是否希望 SqlCommand 返回结果?在您的 c# 代码中,您不会读取结果集 - 您作为非查询语句执行。你想做什么,因为如果你正在寻找一个结果集,那不是这样做的方法。您需要 SqlDataReaderSqlDataAdapter 来读取行数据。
  • 好的。我打开新查询并粘贴此选择。当我从 Visual Studio 复制文本并粘贴而不是 @FullName 时它不起作用,当我输入相同的文本时它起作用。
  • 它只是一个存储过程,但是这个查询不起作用
  • 当我从 Lync 对话中复制一个 SELECT 语句并尝试它时,也发生了同样的事情。它只是没有用。我假设您正在复制的文本中有一个特殊字符。不过这很奇怪。
  • 我假设查询没有向您的应用返回正确的数据。您是否尝试过在可识别的监视窗口中编辑数据(删除名称并重新输入)?看看应用程序是否获得了正确的数据。如果是这样,您就知道数据并不完全相同,尽管看起来确实如此。

标签: c# sql sql-server visual-studio-2012 stored-procedures


【解决方案1】:

我同意最初的嫌疑人是一个“特殊字符”,在 SSMS 中显示为空格粘贴。 我曾遇到过使用 t-sql 过滤客户端数据的情况。

要替换特殊字符,这里有一个很好的起点: .NET replace non-printable ASCII with string representation of hex code

在这种情况下,他们会特别寻找“控制字符”并进行花哨的替换,但查找特殊字符 RegEx 的想法是相同的。

您可以在这里查看各种特殊字符集: http://msdn.microsoft.com/en-us/library/20bw873z(v=vs.110).aspx

但是,如果您正在做一些特定的事情(例如名称),那么定义您想要的内容可能会更容易。 例如,您可以用空格替换任何不是英文字母(例如)的内容:

    str = System.Text.RegularExpressions.Regex.Replace( _
            str, _
            "[^a-zA-Z]", _
            " ")

【讨论】:

  • 感谢您查看并使用我的回答,@Bryuk。我看到并感谢您的“建议编辑”。我想我自己太新了,无法接受。我希望它很快就会被捡起来。
【解决方案2】:

这真的很愚蠢,但我得到了简单的解决方案。由于我的数据库表只包含约 50 条记录,我重新输入了所有名称,现在它可以工作了。所以问题不在VS,而是在SQL Server端。

如果有人遇到类似的问题,首先尝试以某种方式更新表中的数据。您可以尝试选择所有数据,在记事本中复制粘贴,然后将其放回 SQL Server。

【讨论】:

  • 可能问题出在排序规则或“不可见”的特殊字符上。如果您重新输入所有名称,您第一次如何填充该表?
  • 请记住,您不能重新键入包含一百万条记录的表。
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多