C# 在NHibernate中为表名使用命名参数
我需要对一个名为myTable的表进行简单的截断。所以我写了这篇文章,它很有效:C# 在NHibernate中为表名使用命名参数,c#,sql,nhibernate,C#,Sql,Nhibernate,我需要对一个名为myTable的表进行简单的截断。所以我写了这篇文章,它很有效: statelessSession .CreateSQLQuery("TRUNCATE TABLE myTable") .ExecuteUpdate(); 因为我会将表名存储在App.config中,所以我会参数化查询。我会避免使用String.Format,所以我尝试了如下方法 statelessSession .CreateSQLQuery("TRUNCATE TABLE :tabNam
statelessSession
.CreateSQLQuery("TRUNCATE TABLE myTable")
.ExecuteUpdate();
因为我会将表名存储在App.config中,所以我会参数化查询。我会避免使用String.Format,所以我尝试了如下方法
statelessSession
.CreateSQLQuery("TRUNCATE TABLE :tabName")
.SetParameter("tabName", SysCfg.ConfigurationManager.AppSettings["tabName"])
.ExecuteUpdate();
但当我运行此代码时,我得到:
Additional information: could not execute native bulk manipulation query:
TRUNCATE TABLE :seedTableName[SQL: TRUNCATE TABLE @p0]
我还尝试在参数名周围使用大括号,但效果不太好
我哪里错了?这里解释了作为参数的表格 如果查询是静态的,则表名和列名需要是静态的。对于动态表名或列名,应动态生成完整的SQL 因此,您应该将其构建为纯字符串
statelessSession
.CreateSQLQuery("TRUNCATE TABLE " + SysCfg.ConfigurationManager.AppSettings["tabName"])
.ExecuteUpdate();
这里解释了作为参数的表 如果查询是静态的,则表名和列名需要是静态的。对于动态表名或列名,应动态生成完整的SQL 因此,您应该将其构建为纯字符串
statelessSession
.CreateSQLQuery("TRUNCATE TABLE " + SysCfg.ConfigurationManager.AppSettings["tabName"])
.ExecuteUpdate();
NHibernate不允许您做任何超出基础数据库的事情。 在AFAICT中,没有数据库支持表名的参数 例如,你不能写这样的脚本:
CREATE TABLE @tableName (etc etc)...
如果您在哪里绑定到SQL,您将求助于动态SQL
鉴于您使用的是NHibernate,String.Format才是您真正想要的。
像往常一样,检查参数值并确保没有恶意参数插入到查询中。NHibernate不允许您执行任何超出基础数据库的操作。 在AFAICT中,没有数据库支持表名的参数 例如,你不能写这样的脚本:
CREATE TABLE @tableName (etc etc)...
如果您在哪里绑定到SQL,您将求助于动态SQL
鉴于您使用的是NHibernate,String.Format才是您真正想要的。
和往常一样,检查参数值并确保没有恶意参数插入到查询中