我收到了错误 "过程GetClientLastUsed没有提供参数和参数。" 使用NHibernate运行存储过程时。
我的存储过程如下:
USE [EnergyBL]
GO
/****** Object: StoredProcedure [dbo].[GetClientLastUsed] Script Date: 11/13/2014 10:53:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [dbo].[GetClientLastUsed] @ClientID as varchar(50)
/*
Object: GetClientLastUsed
Description: Returns the last time a client was used to create a workorder
Usage: EXEC GetClientLastUsed
Returns: 0 Successful completion
$Workfile: GetClientLastUsed.sql $
$Revision: 1.0 $
$Author: Nathan R. Meunier $
Created: 2014-11-13 $ModTime 2014-11-13 11:00 $
*/
As
SELECT LastUsed.ClientID, LastUsed.LastUsedDate, LastUsed.Lab
FROM (
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'Billings' AS Lab
FROM BLSQL.EnergyBL.dbo.Workorders AS blwo
GROUP BY ClientID
UNION ALL
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'Casper' AS Lab
FROM CASQL.EnergyCA.dbo.Workorders AS blwo
GROUP BY ClientID
UNION ALL
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'College Station' AS Lab
FROM SRVCS.EnergyCS.dbo.Workorders AS blwo
GROUP BY ClientID
UNION ALL
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'Gillette' AS Lab
FROM GLSQL.EnergyGL.dbo.Workorders AS blwo
GROUP BY ClientID
UNION ALL
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'Helena' AS Lab
FROM SRVHE.EnergyHE.dbo.Workorders AS blwo
GROUP BY ClientID
UNION ALL
SELECT ClientID, MAX(DateReceived) AS LastUsedDate, 'Rapid City' AS Lab
FROM SRVRC.EnergyRC.dbo.Workorders AS blwo
GROUP BY ClientID
) AS LastUsed
WHERE ClientID = @ClientID
ORDER BY ClientID, LastUsedDate DESC
我执行存储过程的映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Mirage.Domain.Old"
namespace="Mirage.Domain.Old">
<sql-query name="ClientLastUsed">
exec GetClientLastUsed :ClientID
</sql-query>
</hibernate-mapping>
使用映射的方法:
//return the date/time when the client was last used to create a workorder
public ICollection<ClientLastUsed> GetLastUsed(string ClientID)
{
var finalResults = new List<ClientLastUsed>();
using (ISession session = SessionHelper.OpenSession())
{
var results = session
.GetNamedQuery("ClientLastUsed")
.SetParameter("ClientID", ClientID)
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(ClientLastUsed)));
finalResults = results.List() as List<ClientLastUsed>;
}
return finalResults;
}
获取列的类:
public class ClientLastUsed
{
public virtual string ClientID { get; set; }
public virtual string Lab { get; set; }
public virtual DateTime? LastUsedDate { get; set; }
}
运行解决方案时,catch块返回错误&#34;过程GetClientLastUsed没有提供参数和参数。&#34;
提前感谢您的帮助。
答案 0 :(得分:0)
试试这个:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Mirage.Domain.Old" namespace="Mirage.Domain.Old">
<import class="ClientLastUsed"/>
<resultset name="GetClientLastUsed">
<return-scalar column="ClientID" type="String"/>
<return-scalar column="Lab" type="String"/>
<return-scalar column="LastUsedDate " type="DateTime"/>
</resultset>
<sql-query name="GetClientLastUsed">
exec GetClientLastUsed :ClientID
</sql-query>
</hibernate-mapping>
而且:
session.GetNamedQuery("GetClientLastUsed").SetString("ClientID", ClientID).SetResultTransformer(Transformers.AliasToBean<ClientLastUsed>()).List<ClientLastUsed>();
答案 1 :(得分:0)
按建议更改了我的映射
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Mirage.Domain.Old"
namespace="Mirage.Domain.Old">
<import class="ClientLastUsed" />
<resultset name="GetClientLastused">
<return-scalar column="ClientID" type="String" />
<return-scalar column="Lab" type="String" />
<return-scalar column="LastUsedDate" type="DateTime"/>
</resultset>
<sql-query name="GetClientLastUsed">
exec GetClientLastUsed :ClientID
</sql-query>
</hibernate-mapping>
并且方法已更改为处理建议的转换
//return the date/time when the client was last used to create a workorder
public ICollection<ClientLastUsed> GetLastUsed(string ClientID)
{
var finalResults = new List<ClientLastUsed>();
using (ISession session = SessionHelper.OpenSession())
{
var results = session
.GetNamedQuery("GetClientLastUsed")
.SetParameter("ClientID", ClientID)
.SetResultTransformer(Transformers.AliasToBean<ClientLastUsed>()).List<ClientLastUsed>();
finalResults = results as List<ClientLastUsed>;
}
return finalResults;
}
进行这些更改后,生成的查询才能正常工作。
感谢您的帮助!