【问题标题】:C# error "Could not find Stored procedure" if DB collation is not “SQL_Latin1_General_CP1_CI_AS”如果 DB 排序规则不是“SQL_Latin1_General_CP1_CI_AS”,则 C# 错误“找不到存储过程”
【发布时间】:2015-09-11 11:52:30
【问题描述】:

这是我遇到的情况:


A) C# 代码:执行存储过程“Check_Data”

  • 我想声明,我的 C# 代码没有任何问题,因为它尽可能基本,而且我和我的同事也仔细检查了它。

B) SQL Server:

  • 所有数据库都是 MSSQL2005。请不要建议升级它们,因为这是我的客户使用的。

  • 请注意,以下所有 4 个 DB 以及存储过程“Check_Data”都是以完全相同的方式创建的。唯一的区别是每个 DB 的排序规则。

  • 我使用用户“sa”连接到所有数据库,以确保权限没有问题。

  • 实例 A: 排序规则“SQL_Latin1_General_CP1_CI_AS”

    • DB 1: 排序规则“SQL_Latin1_General_CP1_CI_AS” => C# 代码运行成功。
    • DB 2: 归类“Vietnamese_CI_AS” => C# 代码有错误“找不到存储过程”。
  • 实例 B: 归类“Vietnamese_CI_AS”

    • DB 1: 排序规则“SQL_Latin1_General_CP1_CI_AS” => C# 代码运行成功。
    • DB 2: 归类“Vietnamese_CI_AS”

=> C# 代码有错误“找不到存储过程”。


所以基本上,我的数据库只是讨厌排序规则“Vietnamese_CI_AS” 并拒绝获取这个存储过程。

这是“Check_Data”的脚本:

CREATE PROCEDURE [dbo].[Check_Data]
(   
    @Acc    nvarchar(50),   
    @Status varchar(500) OUTPUT)
AS
BEGIN

if exists (select 1 from tblRequest where Acc=@Acc)

    SET @Status = '1'--have data
else
    SET @Status = '0'--have not data        
END

谁能告诉我这有什么问题?

更新

当我使用上面的脚本创建新的过程将不同的名称(Check_Acc),代码成功调用这个新过程。

因此,我暂时将采用此解决方案并重命名所有有此问题的 proc。

但是,如果我知道是什么导致代码无法调用原始 proc,我将不胜感激。

【问题讨论】:

  • 我希望看到不同的错误消息...当您在存储过程之外运行 SQL 时会发生什么?更改数据库上的排序规则只会更改新对象和新调用的默认值。我怀疑您可能需要删除并重新创建 proc,或者在 where 子句中指定排序规则
  • 我已经尝试删除并重新创建它,但仍然出现错误。但是,如果我用相同的脚本创建一个新的,只需更改 proc 的名称,就可以了。现在我真的很困惑。

标签: c# sql sql-server stored-procedures sql-server-2005


【解决方案1】:

我遇到了this Forum post。尝试将您的 CommandText 更改为

execute stored procedure "Check_Data"

或创建一个适当的 SqlCommand 类型为 StoredProcedure

SqlCommand command = new SqlCommand("Check_Data",yourConn);
command.CommandType = CommandType.StoredProcedure;

【讨论】:

  • 正如我在帖子中所说,我不认为 C# 代码有问题,因为当我使用排序规则“SQL_Latin1_General_CP1_CI_AS”更改与另一个数据库的连接时,一切都很好。此错误仅在 DB 的排序规则为“Vietnamese_CI_AS”时显示。
猜你喜欢
  • 2023-04-11
  • 2011-03-02
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 2012-11-20
  • 2010-09-25
  • 1970-01-01
  • 2014-06-01
相关资源
最近更新 更多