C# 如何使用nhibernate从存储过程返回位
我在我的项目中使用nHibernate,但我有一个存储过程,它只返回一个成功的布尔值或现在的布尔值 如何用c#编写此代码 我已经尝试了以下方法,但它不喜欢,因为我没有布尔的映射 {“没有持久化:System.Boolean, mscorlib,版本=2.0.0.0, 文化=中立, PublicKeyToken=b77a5c561934e089“}C# 如何使用nhibernate从存储过程返回位,c#,nhibernate,C#,Nhibernate,我在我的项目中使用nHibernate,但我有一个存储过程,它只返回一个成功的布尔值或现在的布尔值 如何用c#编写此代码 我已经尝试了以下方法,但它不喜欢,因为我没有布尔的映射 {“没有持久化:System.Boolean, mscorlib,版本=2.0.0.0, 文化=中立, PublicKeyToken=b77a5c561934e089“} IQuery query=NHibernateSession.CreateSQLQuery(“EXEC MyDatabase.dbo.[Content
IQuery query=NHibernateSession.CreateSQLQuery(“EXEC MyDatabase.dbo.[ContentProvider\u Import]:ContentProviderImportLogId”,“success”,typeof(bool))
.SetInt32(“ContentProviderImportLogId”,log.Id);
var test=query.UniqueResult();
同样的结果来自
IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId")
.AddEntity(typeof(bool))
.SetInt32("ContentProviderImportLogId", log.Id);
var test = query.UniqueResult<bool>();
IQuery query=NHibernateSession.CreateSQLQuery(“EXEC MyDatabase.dbo.[ContentProvider\u Import]:ContentProviderImportLogId”)
.附录(类型(bool))
.SetInt32(“ContentProviderImportLogId”,log.Id);
var test=query.UniqueResult();
我会用一种稍微不同的方式解决这个问题,希望能为您提供一种解决方法
我将更改存储过程以返回bool,如下所示:
declare @result bit
set @result = 1
select @result
那么C#代码将是:
IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId")
.SetInt32("ContentProviderImportLogId", log.Id);
var test = query.UniqueResult<bool>();
IQuery query=NHibernateSession.CreateSQLQuery(“EXEC MyDatabase.dbo.[ContentProvider\u Import]:ContentProviderImportLogId”)
.SetInt32(“ContentProviderImportLogId”,log.Id);
var test=query.UniqueResult();
如果您尝试query.UniqueResult(),您会得到什么?我对hibernate不太了解,因此无法确定,但是指定一个可为null的bool(bool?
,nullable
或NHibernateUtil.Boolean
)可能会奏效。另外,请注意,您可以编辑您的问题标题-您不必创建一个全新的问题:单击问题标签下方的“编辑”链接。Claudio-它不会引发上述错误的异常,或者,如果我尝试不使用bool声明,我会得到一个定义为no-return类型的异常jeff-我没有意识到第二个问题已经被创建了,我的连接在发布和站点“超时”期间死亡,但显然没有!Jeff-NHibernateUtil.布尔值不会出现在我的智能感知中如果我做了typeof如果我没有我没有得到一个类型错误谢谢s1mm0t但这正是我所尝试的,我只是得到一个错误说我没有声明返回类型不确定你的问题是什么。在我发布我的答案之前,我尝试了这个方法,效果很好。我正在运行NHibernate的2.1.2.4000版。您使用的是旧版本吗?另外,从您调用SP的方式来看,您似乎正在使用SQLServer,而这正是我在(2008)中测试的结果。如果您没有,那么这可能是它不起作用的另一个原因。很抱歉,出现以下错误:{“未指定SQL查询的返回类型[EXEC MyDatabase.dbo.[ContentProvider\u Import]:ContentProviderImportLogId]”}FYI,如果您不想声明变量,您可以像这样强制转换select语句:select cast(1作为位)
IQuery query = NHibernateSession.CreateSQLQuery("EXEC MyDatabase.dbo.[ContentProvider_Import] :ContentProviderImportLogId")
.SetInt32("ContentProviderImportLogId", log.Id);
var test = query.UniqueResult<bool>();