【问题标题】:Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar while executing a stored procedure with Entity Framework使用实体框架执行存储过程时,过程需要类型为“ntext/nchar/nvarchar”的参数“@statement”
【发布时间】:2017-07-16 06:32:24
【问题描述】:

我遇到了错误

过程需要“ntext/nchar/nvarchar”类型的参数“@statement”

在使用 Entity Framework 执行存储过程时。

这是我的存储过程:

CREATE PROCEDURE [dbo].[usp_RolesList]   
    (@WhereCond VARCHAR(50))
AS
BEGIN
    SET NoCount ON

    DECLARE @SQLQuery AS VARCHAR(MAX)
    SET @SQLQuery = 'Select * From dbo.AspNetRoles ' + @WhereCond

    EXECUTE sp_Executesql @SQLQuery
END

这是我用于执行结果的 c# 代码

var idParam = new SqlParameter
                    {
                        ParameterName = "WhereCond",
                        Value = "where Id > 0"
                    };
var courseList = ctx.Database.SqlQuery<UserRoles>("exec usp_RolesList @WhereCond ", idParam).ToList<UserRoles>();

【问题讨论】:

  • @SQLQuery更改为nvarchar(max)
  • 现在收到错误 - $exception {“从商店提供者的数据读取器读取时发生错误。有关详细信息,请参阅内部异常。”} System.Data.Entity.Core.EntityCommandExecutionException - InnerException { “将 nvarchar 值 'ca546b0d-e4b1-4146-a879-9e760f5dd925' 转换为数据类型 int 时转换失败。”} System.Exception {System.Data.SqlClient.SqlException}
  • 还有@WhereCond
  • 遇到同样的错误

标签: c# sql-server entity-framework


【解决方案1】:

使用此默认脚本创建 AspNetRoles 表.. 如果您没有更改它..

CREATE TABLE [dbo].[AspNetRoles](
[Id] [nvarchar](128) NOT NULL,
[Name] [nvarchar](256) NOT NULL,
CONSTRAINT [PK_dbo.AspNetRoles] PRIMARY KEY CLUSTERED 
(
  [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

所以试试这个...

var idParam = new SqlParameter
                {
                    ParameterName = "WhereCond",
                    Value = "where not Id is null" //it will be work but it makes no sense because it is primarkey field
                };
var courseList = ctx.Database.SqlQuery<UserRoles>("exec usp_RolesList @WhereCond ", idParam).ToList<UserRoles>();

【讨论】:

  • 我已经解决了问题,但是由于您的答案与我解决的相同,所以我将其标记为正确。
猜你喜欢
  • 2014-12-07
  • 2018-03-01
  • 2016-12-25
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
相关资源
最近更新 更多