Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用nhibernate从存储过程返回位_C#_Nhibernate - Fatal编程技术网

C# 如何使用nhibernate从存储过程返回位

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

我在我的项目中使用nHibernate,但我有一个存储过程,它只返回一个成功的布尔值或现在的布尔值

如何用c#编写此代码

我已经尝试了以下方法,但它不喜欢,因为我没有布尔的映射

{“没有持久化:System.Boolean, mscorlib,版本=2.0.0.0, 文化=中立, PublicKeyToken=b77a5c561934e089“}

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>();