C#错误”;找不到“存储过程”;如果DB排序规则不是“SQL_Latin1_General_CP1_CI_AS”

本文关键字:存储过程 AS SQL Latin1 CP1 CI General 排序 找不到 错误 如果 | 更新日期: 2023-09-27 17:59:40

这是我遇到的情况:


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#代码出现错误"找不到存储过程"。


所以,基本上,我的DB只是讨厌排序规则“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,我真的很感激。

C#错误”;找不到“存储过程”;如果DB排序规则不是“SQL_Latin1_General_CP1_CI_AS”

我看到了这个论坛帖子。尝试将CommandText更改为

execute stored procedure "Check_Data"

或使用类型StoredProcedure 创建正确的SqlCommand

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