最近公司在做一个驾校的项目,做一个WCF的数据接口,事务里面操作3张表的数据,一个(学员)表里面有自动增长列STU_ID(插入数据),一个(培训)表需要根据学员表刚插入数据的STU_ID进行数据的更新。对这个问题,我先上网查询到了使用 select sq_stu_id.nextval from dual 这条语句能够知道下一条STU_ID是多少,然后下面就是在Nhibernate里面进行Oracle语句的执行:
WCF Service端的数据接口里面
string sql = "select sq_stu_id.nextval from dual";
int stu_id = (int)trainingImp.ExecuteSacleBySql<decimal>(sql);
Dao.Dal
virtual public T ExecuteSacleBySql<T>(string sql)
{
return ExecuteSacleBySql<T>(sql, null);
}
virtual public T ExecuteSacleBySql<T>(string sql, Dictionary<string, object> nameValues)
{
objectLog.Debug("query: " + sql + " by sql");
try
{
ISession SessionProxy = HibernateTemplate.CreateSessionProxy(this.Session);
IQuery myQuery = SessionProxy.CreateSQLQuery(sql);
if (nameValues != null && nameValues.Count > 0)
{
foreach (var item in nameValues.Keys)
{
myQuery.SetParameter(item, nameValues[item]);
}
}
return myQuery.UniqueResult<T>();
}
catch (Exception ex)
{
objectLog.Error("run by sql failed", ex);
throw ex;
}
}