我有一个遗留应用程序(vfp 8),我需要从中提取数据(无插入).我使用Accnum字段作为主键,它在表中定义为字符11.
工厂配置:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <reflection-optimizer use="false" /> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="dialect">NHibernate.Dialect.GenericDialect</property> <property name="connection.driver_class">NHibernate.Driver.OleDbDriver</property> <property name="connection.connection_string">Provider=VFPOLEDB.1;Data Source=C:\Analysis\Quantium\development\RD warehouse\_RDAUWH\Data;Collating Sequence=MACHINE</property> <property name="show_sql">false</property> </session-factory> </hibernate-configuration>
这是我的映射文件:
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="RDLabels" namespace="RDLabels.Domain"> <class name="CustMast"> <id name="Accnum" column="Accnum" type="string"> <generator class="assigned"/> </id> <property name="Fullname" /> <property name="Add" /> <property name="State" /> </class> </hibernate-mapping>
班级:
public class CustMast { private string _accnum; public virtual string Accnum { get { return _accnum; } set { _accnum = value; } } private string _fullname; public virtual string Fullname { get { return _fullname; } set { _fullname = value; } } private string _add; public virtual string Add { get { return _add; } set { _add = value; } } private string _state; public virtual string State { get { return _state; } set { _state = value; } } }
public CustMast GetByAccnum(String accnum) { using (ISession session = NHibernateHelper.OpenSession()) { CustMast custMast = session .CreateCriteria(typeof(CustMast)) .Add(Restrictions.Eq("Accnum",accnum)) .UniqueResult<CustMast>(); return custMast; } }
完整的错误是:
NHibernate.Exceptions.GenericADOException : Could not execute query [ SELECT this_.Accnum as Accnum0_0_,this_.Fullname as Fullname0_0_,this_.Add as Add0_0_,this_.State as State0_0_ FROM CustMast this_ WHERE this_.Accnum = ? ] Name:cp0 - Value:00059337444 [sql: SELECT this_.Accnum as Accnum0_0_,this_.State as State0_0_ FROM CustMast this_ WHERE this_.Accnum = ?] ----> system.indexOutOfRangeException : Invalid index 0 for this OleDbParameterCollection with Count=0. - d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:1590
运行NHibernate Profiler,它显示:
WARN: reflection-optimizer property is ignored out of application configuration file. WARN: system.indexOutOfRangeException: Invalid index 0 for this OleDbParameterCollection with Count=0. at System.Data.OleDb.OleDbParameterCollection.RangeCheck(Int32 index) at System.Data.OleDb.OleDbParameterCollection.GetParameter(Int32 index) at System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item(Int32 index) at NHibernate.Driver.DriverBase.ExpandQueryParameters(IDbCommand cmd,sqlString sqlString) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Driver\DriverBase.cs:line 235 at NHibernate.AdoNet.AbstractBatcher.ExpandQueryParameters(IDbCommand cmd,sqlString sqlString) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\AdoNet\AbstractBatcher.cs:line 232 at NHibernate.Loader.Loader.PrepareQueryCommand(QueryParameters queryParameters,Boolean scroll,ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs:line 1152 ERROR: Invalid index 0 for this OleDbParameterCollection with Count=0.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。