Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 незаписать в поле cblob текст в unicode  [new]
DerAXTYNG
Member

Откуда:
Сообщений: 1
СУБД: FireBird 2.1
ORM: Nhibernate
Provider: FirebirdClient-2.5.0

кусочеГ кода:
            IST1CertificateManager certificateManager = new ST1CertificateManager();
            ST1Certificate certificate = certificateManager.findModelById(1);
            Assert.IsNotNull(certificate);

            CertificateItem model = new CertificateItem();
            model.Certificate = certificate.Id;
            model.Documents = "№ П-170 от 05.05.2009г.";
            model.Idx = 0;
            model.ItemOrder = "1";
            model.Brutto = "33,0";
            model.Netto = "20,0";
            model.Origin = "П";
            model.PackageCount = "1 ящик";
            model.Title = "вывывывывывы";
            ICertificateItemManager manager = new CertificateItemManager();
            CertificateItem newModel = manager.createModel(model);
            Assert.IsNotNull(newModel);
            Assert.AreEqual(certificate.Id, newModel.Certificate);

В бд:
TITLE         CBLOB_DOMAIN /* CBLOB_DOMAIN = BLOB SUB_TYPE 1 SEGMENT SIZE 1024 */
charset = UTF8 для этого поля.

Маппинг поля в коде:
private String title;
        [NHibernate.Mapping.Attributes.Property(0, Column = "TITLE")] 
        public virtual String Title { get { return title; } set { title = value; } }

При попытки записать в БД объект типа CertificateItem (т.е. ISession.Flush()), где полю Title присваивается не английский текст, выкидывает эксепшен:
failed: TPPCertificates.Frmwrk.exception.AppException : error.model.create
  ----> NHibernate.ADOException : could not insert: [TPPCertificates.Frmwrk.model.CertificateItem#2][SQL: INSERT INTO CERTIFICATE_ITEM (CERTIFICATE, IDX, ITEMORDER, PACKAGECOUNT, PACKAGETYPE, TITLE, ORIGIN, NETTO, BRUTTO, DOCUMENTS, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)]
  ----> FirebirdSql.Data.FirebirdClient.FbException : Malformed string
  ----> FirebirdSql.Data.Common.IscException : Выдано исключение типа "FirebirdSql.Data.Common.IscException".
	C:\Documents and Settings\xxx\Мои документы\Visual Studio 2005\Projects\TPPCertificates\TPPCertificates.Frmwrk\manager\OrmModelManager.cs(39,0): в TPPCertificates.Frmwrk.manager.OrmModelManager`1.createModel(MODEL model)
	C:\Documents and Settings\xxx\Мои документы\Visual Studio 2005\Projects\TPPCertificates\TPPCertificates.Tests\Frmwrk\TestORM.cs(130,0): в TPPCertificates.Tests.Frmwrk.TestORM.TestCreateCertificateItems()
	--ADOException
	в 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.Impl.ScheduledInsertion.Execute()
	в NHibernate.Impl.SessionImpl.Execute(IExecutable executable)
	в NHibernate.Impl.SessionImpl.ExecuteAll(IList list)
	в NHibernate.Impl.SessionImpl.Execute()
	в NHibernate.Impl.SessionImpl.Flush()
	C:\Documents and Settings\xxx\Мои документы\Visual Studio 2005\Projects\TPPCertificates\TPPCertificates.Frmwrk\manager\OrmModelManager.cs(32,0): в TPPCertificates.Frmwrk.manager.OrmModelManager`1.createModel(MODEL model)
	--FbException
	в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteNonQuery()
	в NHibernate.Impl.BatcherImpl.ExecuteNonQuery(IDbCommand cmd)
	в NHibernate.Impl.NonBatchingBatcher.AddToBatch(IExpectation expectation)
	в NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, Object obj, ISessionImplementor session)
	--IscException
	в FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ProcessResponse(IResponse response)
	в FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ReadResponse()
	в FirebirdSql.Data.Client.Managed.Version10.GdsDatabase.ReadGenericResponse()
	в FirebirdSql.Data.Client.Managed.Version11.GdsStatement.Execute()
	в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteCommand(CommandBehavior behavior, Boolean returnsSet)
	в FirebirdSql.Data.FirebirdClient.FbCommand.ExecuteNonQuery()

Соответственно если этому полю присвоить NULL или английский текст, то запись сохраняется нормально.

И еще такой момент, м.б. полезная информация, у объекта типа CertificateItem есть поля имеющие отображения в БД типа varchar (charset = UTF8), русский текст в них записывается нормально.
2 авг 09, 16:11    [7488499]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить