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,我真的很感激。
我看到了这个论坛帖子。尝试将CommandText更改为
execute stored procedure "Check_Data"
或使用类型StoredProcedure 创建正确的SqlCommand
SqlCommand command = new SqlCommand("Check_Data",yourConn);
command.CommandType = CommandType.StoredProcedure;