加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 使用带有nHibernate的CreateSQLQuery的SQL Server

发布时间:2021-04-02 08:53:47 所属栏目:编程 来源:网络整理
导读:我试图用nHibernate(2.0.1GA)发出一个SQL更新语句,如下所示: sqlstring = string.Format("set nocount on;update myusers set geo=geography::Point({0},{1},4326) where userid={2};",mlat,mlong,userid);_session.CreateSQLQuery(sqlstring).ExecuteUpdate

我试图用nHibernate(2.0.1GA)发出一个SQL更新语句,如下所示:

sqlstring = string.Format("set nocount on;update myusers set geo=geography::Point({0},{1},4326) where userid={2};",mlat,mlong,userid);
_session.CreateSQLQuery(sqlstring).ExecuteUpdate();

可是我收到以下错误:’geography @ p0’不是公认的内置函数名称.

我以为CreateSQLQuery只会转达我给它的SQL并执行它…猜不是.关于如安在nHibernate的上下文中做到这一点的任何设法?

办理要领

我很确定我可以汇报你产生了什么,但我不知道是否有办理要领.

我以为题目是NHibernate行使’:’字符来建设定名参数.您的表达式将变动为:

set nocount on;update myusers set geo=geography@p0({0},4326) where userid={2};

@ p0将成为SQL变量.遗憾的是,我找不到任何有关转义冒号的文档,因此它们不会被视为定名参数.

假如存在转义字符(我快速赏识NHibernate源代码没有找到;假如你想花一点时刻搜刮,则定名参数在NHibernate.Engine.Query.ParameterParser中处理赏罚),那么你可以行使它.

其他方案:

>向源添加转义字符.然后,您可以行使NHibernate的修改版本.假如你这样做,你应该把你的补丁提交给团队,这样它就可以包括在真实的对象中,你不必维护源的修改版本(没有爱好).
>在数据库中建设一个返回geography :: Point的用户界说函数,然后挪用函数而不是尺度SQL函数.这好像是最快/最简朴的起床和跑步方法,但也有点像创可贴.
>查察NHibernate Spatial中是否有某些内容可以让您以编程方法添加geography :: Point()[或编辑该项目标代码以添加一个并将补丁提交给该团队].

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读