Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate OleDB:使用会话时程序绑定无效。get<;T>;(id)_C#_Sql_Nhibernate_Oledb - Fatal编程技术网

C# NHibernate OleDB:使用会话时程序绑定无效。get<;T>;(id)

C# NHibernate OleDB:使用会话时程序绑定无效。get<;T>;(id),c#,sql,nhibernate,oledb,C#,Sql,Nhibernate,Oledb,我第一次使用NHibernate。我已经将其设置为使用OleDB连接到SQLBase数据库。我已经设置了一些类,现在尝试第一个简短的测试,看看它是否有效 这是我的测试: [TestClass] public class Hibernate { private ISessionFactory _sessionFactory; private Configuration _config; [TestInitialize] public void InitTest()

我第一次使用NHibernate。我已经将其设置为使用OleDB连接到SQLBase数据库。我已经设置了一些类,现在尝试第一个简短的测试,看看它是否有效

这是我的测试:

[TestClass]
public class Hibernate
{
    private ISessionFactory _sessionFactory;
    private Configuration _config;

    [TestInitialize]
    public void InitTest()
    {
        _config = new Configuration();
        _config.Configure();
        _config.AddAssembly(typeof(Coil).Assembly);
        _sessionFactory = _config.BuildSessionFactory();
    }


    [TestMethod]
    public void TestMethod1()
    {
        using (var session = _sessionFactory.OpenSession())
        {
            Int32 coilid = 12189;
            Coil coil = session.Get<Coil>(coilid);
            Assert.AreEqual(coil.CoilNumber, "6FEB13");
        }
    }
}
线圈表的创建表语法如下所示:

CREATE TABLE COIL (
  COILID INTEGER NOT NULL, 
  COILNR VARCHAR(50), 
);
Edit5:查询所有条目都有效,但只要我想从表中获得一个特定条目,我就会得到?再次出错:(

但是SQLbase需要准备好的字符串,比如

WHERE coil0_.COILID = :0
\
12189
/

要改变nhibernate将绑定变量转换为SQL的方式,我必须做些什么?

我可以通过为SQLBase编写自己的驱动程序和方言(分别来自OleDbDriver和GenericDialogue)来解决这个问题。如果其他人需要将SQLBase与NHibernate一起使用,我可以发布代码。

您可以发布stacktrace的其余部分吗?可能是类型不匹配。db中的整数是有符号的还是无符号的?我将在周一回到办公室后发布整个stacktrace。我在测试中编辑了stacktrace。它看起来像个bug。如果您想调试它,请您可以实现自己的批处理程序继承nobatching批处理程序,并截取
ExecuteReader()
查看命令,如果有参数设置作为解决方法,请将
batcher.ExecuteReader()
中的占位符替换为适当的占位符
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader()
NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session)
NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister)
NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId)
NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session)
NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor session)
NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
NHibernate.Event.Default.DefaultLoadEventListener.DoLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
NHibernate.Event.Default.DefaultLoadEventListener.ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options)
NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType)
NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType)
NHibernate.Impl.SessionImpl.Get(String entityName, Object id)
NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id)
NHibernate.Impl.SessionImpl.Get[T](Object id)
Tests.Hibernate.TestMethod1() in "D:\Hibernate.cs": Zeile 36
CREATE TABLE COIL (
  COILID INTEGER NOT NULL, 
  COILNR VARCHAR(50), 
);
var allCoils = session.CreateCriteria<Coil>().List<Coil>();
Coil datCoil = allCoils.First<Coil>(coil => coil.CoilNumber == "6FEB13");
Assert.AreEqual(datCoil.CoilNumber, "6FEB13");
DEBUG NHibernate.SQL - SELECT coil0_.COILID as COILID1_0_, coil0_.COILNR as COILNR1_0_ FROM COIL coil0_ WHERE coil0_.COILID=?;p0 = 12189
WHERE coil0_.COILID = :0
\
12189
/