我在数据库中有一张表,其中一列包含以nvarchar存储的xml。我需要编写查询并根据存储在该列中的数据获取信息。
因此,我最终使用NHibernate编写了以下本地sql查询:
string sql = @"SELECT a.id as s
FROM [DBT].[dbo].[tb_myTable] a
where (cast (a.vchExtendedInfo as XML)).value('/*[1]/@type','NVARCHAR(MAX)')='deal'"
ISQLQuery sqlQuery = HibernateUtil.GetCurrentSession().CreateSQLQuery(sql)
并引发错误:'ArgumentOutOfRangeException'-长度不能小于零。参数名称:length。
经过一点测试,我发现NHibernate试图解析我的查询,而这'/*[1]/@type'
行可能是原因。(这实际上是一个简化的示例,如果我删除此示例,则所有其他条件都可以很好地工作)。
因此,如何转义/修复查询以使其正常工作?
我猜这是因为查询中的“ @”。
您是否已经尝试过使用参数?
string sql = @"SELECT a.id as s
FROM [DBT].[dbo].[tb_myTable] a
where (cast (a.vchExtendedInfo as XML)).value(:type,'NVARCHAR(MAX)')=:value"
ISQLQuery sqlQuery = HibernateUtil.GetCurrentSession()
.CreateSQLQuery(sql)
.SetAnsiString("type", "/*[1]/@type")
.SetAnsiString("value", "deal");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句