此OracleParameterCollection 的 Count=4 的索引 4 无效 的解决办法 NHibernate
2011-10-11 12:46
627 查看
概述:
当用Nhibernate操作主从表时,往主表插入数据时,当执行到提交事务时出现如下错误:
此 OracleParameterCollection 的 Count=4 的索引 4 无效。
在 System.Data.OracleClient.OracleParameterCollection.RangeCheck(Int32 index) 在 System.Data.OracleClient.OracleParameterCollection.GetParameter(Int32 index) 在 System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index) 在 NHibernate.Type.DecimalType.Set(IDbCommand st, Object value, Int32 index) 在 NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index) 在 NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session) 在 NHibernate.Action.EntityInsertAction.Execute() 在 NHibernate.Engine.ActionQueue.Execute(IExecutable executable) 在 NHibernate.Engine.ActionQueue.ExecuteActions(IList list) 在 NHibernate.Engine.ActionQueue.ExecuteActions() 在 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) 在 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) 在 NHibernate.Impl.SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit() 在 DataAccess.DictateDao.AddRecord(String registerOrgid, String registerOperatorid, String dictateTitle, String dictateContent, String dictateType, String[] informOrgid, String[] accessoryName, String[] accessorySize) 位置 D:\OA\DataAccess\DataAccess\DictateDao.cs:行号 64
主表xml如下:
Code
public static bool AddRecord(string registerOrgid, string registerOperatorid, string dictateTitle, string dictateContent, string dictateType, string[] informOrgid, string[] accessoryName, string[] accessorySize)
{
bool IsSuccess = false;
string dictateID ="";
JkptOaxtDictate od = new JkptOaxtDictate();
JkptOaxtDictatedetails detail = new JkptOaxtDictatedetails();
ITransaction trans = session.BeginTransaction();
try
{
od.Registerorgid = decimal.Parse(registerOrgid);
od.Registeroperatorid = registerOperatorid;
od.Registertime = DateTime.Now.ToLocalTime();
od.Dictatetitle = dictateTitle;
od.Dictatedesc = dictateContent;
od.Informtype = decimal.Parse(dictateType);
od.Modifytime = DateTime.Now.ToLocalTime();
od.Browsetime = DateTime.Now.ToLocalTime();
for (int i = 0; i < informOrgid.Length; i++)
{
detail.Dictateid = decimal.Parse("3");
detail.Targetorgid = decimal.Parse(informOrgid[i]);
detail.Sign = 0;
detail.dictate = od;
od.details.Add(detail);
session.Save(od);
}
trans.Commit();
//写日志
Helpers.SaveInfo("Insert dictate 's infomation Success!");
IsSuccess = true;
}
catch (Exception ex)
{
IsSuccess = false;
trans.Rollback();
//写日志
Helpers.SaveInfo("插入失败!错误提示如下:" + ex.Message);
}
finally
{
if (session != null)
{
session.Clear();
}
}
return IsSuccess;
}
当执行到trans.Commit()时出现如上所述错误.
解决办法:
原因是:
从表关联主表时的问题.
<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model"/>
修改为:<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model" insert="false" update="false"/>
即添加属性insert="false" update="false"
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 28099;
var cb_entryId = 1427403;
var cb_blogApp = "abcdwxc";
var cb_blogUserGuid = "d8793d0b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2009/4/1 17:32:00';
当用Nhibernate操作主从表时,往主表插入数据时,当执行到提交事务时出现如下错误:
此 OracleParameterCollection 的 Count=4 的索引 4 无效。
在 System.Data.OracleClient.OracleParameterCollection.RangeCheck(Int32 index) 在 System.Data.OracleClient.OracleParameterCollection.GetParameter(Int32 index) 在 System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index) 在 NHibernate.Type.DecimalType.Set(IDbCommand st, Object value, Int32 index) 在 NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, Object value, Int32 index) 在 NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object value, Int32 index, ISessionImplementor session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate(Object id, Object[] fields, Object rowId, Boolean[] includeProperty, Boolean[][] includeColumns, Int32 table, IDbCommand statement, ISessionImplementor session, Int32 index) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Object obj, ISessionImplementor session) 在 NHibernate.Action.EntityInsertAction.Execute() 在 NHibernate.Engine.ActionQueue.Execute(IExecutable executable) 在 NHibernate.Engine.ActionQueue.ExecuteActions(IList list) 在 NHibernate.Engine.ActionQueue.ExecuteActions() 在 NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions(IEventSource session) 在 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent event) 在 NHibernate.Impl.SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit() 在 DataAccess.DictateDao.AddRecord(String registerOrgid, String registerOperatorid, String dictateTitle, String dictateContent, String dictateType, String[] informOrgid, String[] accessoryName, String[] accessorySize) 位置 D:\OA\DataAccess\DataAccess\DictateDao.cs:行号 64
主表xml如下:
Code
public static bool AddRecord(string registerOrgid, string registerOperatorid, string dictateTitle, string dictateContent, string dictateType, string[] informOrgid, string[] accessoryName, string[] accessorySize)
{
bool IsSuccess = false;
string dictateID ="";
JkptOaxtDictate od = new JkptOaxtDictate();
JkptOaxtDictatedetails detail = new JkptOaxtDictatedetails();
ITransaction trans = session.BeginTransaction();
try
{
od.Registerorgid = decimal.Parse(registerOrgid);
od.Registeroperatorid = registerOperatorid;
od.Registertime = DateTime.Now.ToLocalTime();
od.Dictatetitle = dictateTitle;
od.Dictatedesc = dictateContent;
od.Informtype = decimal.Parse(dictateType);
od.Modifytime = DateTime.Now.ToLocalTime();
od.Browsetime = DateTime.Now.ToLocalTime();
for (int i = 0; i < informOrgid.Length; i++)
{
detail.Dictateid = decimal.Parse("3");
detail.Targetorgid = decimal.Parse(informOrgid[i]);
detail.Sign = 0;
detail.dictate = od;
od.details.Add(detail);
session.Save(od);
}
trans.Commit();
//写日志
Helpers.SaveInfo("Insert dictate 's infomation Success!");
IsSuccess = true;
}
catch (Exception ex)
{
IsSuccess = false;
trans.Rollback();
//写日志
Helpers.SaveInfo("插入失败!错误提示如下:" + ex.Message);
}
finally
{
if (session != null)
{
session.Clear();
}
}
return IsSuccess;
}
当执行到trans.Commit()时出现如上所述错误.
解决办法:
原因是:
从表关联主表时的问题.
<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model"/>
修改为:<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model" insert="false" update="false"/>
即添加属性insert="false" update="false"
if ($ != jQuery) {
$ = jQuery.noConflict();
}
var isLogined = false;
var cb_blogId = 28099;
var cb_entryId = 1427403;
var cb_blogApp = "abcdwxc";
var cb_blogUserGuid = "d8793d0b-63cf-dd11-9e4d-001cf0cd104b";
var cb_entryCreatedDate = '2009/4/1 17:32:00';
相关文章推荐
- 使用NHibernate出现错误"此SqlParameterCollection 的 Count=71 的索引 71 无效"
- 求解:此OracleParameterCollection 的 Count=4 的索引 4 无效 NHibernate
- 此 SqlParameterCollection 的 Count=4 的索引 4 无效。
- [Oracle] “表中有数据,但select count(*)的结果为0”问题的解决办法
- Nhibernate中Unexpected row count的一种解决办法
- OEM (Oracle 企业管理器)登录提示您的用户名/或口令无效的解决办法
- Oracle 关于报错"ORA-01747: user.table.column, table.column 或列说明无效"的终极解决办法
- Oracle 111g 安装ArcSDE报ora-285955 Extproc 代理:DLL 路径无效 解决办法
- ORA-00922: 选项缺失或无效和ORA-28000: ORACLE账户锁定的解决办法
- Oracle Error:ORA-01465: 无效的十六进制数字【解决办法】
- Oracle安装过程中出现:ORA-00922:选项缺失或无效问题解决办法
- ORACLE 不走索引(失效)的原因以及解决办法
- 另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法
- ORA-00922: 选项缺失或无效和ORA-28000: ORACLE账户锁定的解决办法
- oracle数据库升级导致的数据库对象不可用或无效解决办法
- mysql 表中的索引 都是无效状态 的解决办法
- ORA-00922: 选项缺失或无效和ORA-28000: ORACLE账户锁定的解决办法
- ORA-00922: 选项缺失或无效和ORA-28000: ORACLE账户锁定的解决办法
- NHibernate Invalid index N for this SqlParameterCollection with Count=N Exception 简易处理
- 安装oracle 10g 时“ORA-00988:口令缺失或无效”的解决办法