从 C# 网站调用时找不到存储过程

问题描述 投票:0回答:1

我在 sql server 中有一个数据库(NewYekAye),其中包含一些表和存储过程。其中一个表是 TbSoore,存储过程之一是 spGetSoore。

我使用以下代码创建了 spGetSoore:

USE [NewYekAye]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE Procedure [dbo].[spGetSoore]  
@IdSoore INT
As  
Begin  
    SELECT IdSoore, NameSoore, MakiMadani, TextMoghadame, TextHadis, TextMohtava, TextMoarefi FROM TbSoore WHERE (StutusSoore = 1) AND (IdSoore = @IdSoore)
End
Go

在 C# 代码中使用它:

            string strsql =
                            $@"EXEC spGetSoore @IdSoore = @IdSoore;";

            DataTable dt = new DataTable();
            using (SqlConnection con = new SqlConnection(strcon))
            {
                using
                    (SqlCommand cmdSQL = new SqlCommand(strsql, con))
                {
                    cmdSQL.CommandType = CommandType.StoredProcedure;
                    cmdSQL.Parameters.Add(new SqlParameter ("@IdSoore", forwardedIdSoore)) ;
                    con.Open();
                    dt.Load(cmdSQL.ExecuteReader());
                }
            }

但是当我运行该网站时,我收到此错误:

异常详细信息: System.Data.SqlClient.SqlException:找不到存储过程“EXEC spGetSoore @IdSoore = @IdSoore”。

我使用

SELECT IdSoore, NameSoore, MakiMadani, TextMoghadame, TextHadis, TextMohtava, TextMoarefi FROM TbSoore WHERE (StutusSoore = 1) AND (IdSoore = @IdSoore) 
查询代替
Exec spGetSoore
检查了 C# 中的 sql 连接并成功了。

然后在 sql server 查询中运行

Exec spGetSoore
也可以工作。

当然,在 sql server 中,当我编写

EXEC spGetSoore @IdSoore = 1;
时,使用此工具提示显示
spGetSoore
的红色下划线:

找不到存储过程“spGetSoore”。

但是有效!!

像这样:

enter image description here

但我不知道为什么会出现此错误以及如何修复它。

请帮助我。

c# sql-server stored-procedures
1个回答
0
投票

当您使用

CommandType.StoredProcedure
时,客户端库假定提供的
CommandText
是要调用的存储过程的名称,而不是完整的 TSQL 指令。查看您的错误,您会发现它正在搜索名为“EXEC spGetSoore @IdSoore = @IdSoore”的过程,而不是“spGetSoore”。

删除 CommandType 分配或将 CommandText 修复为“spGetSoore”。

© www.soinside.com 2019 - 2024. All rights reserved.