powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / незаписать в поле cblob текст в unicode
1 сообщений из 1, страница 1 из 1
незаписать в поле cblob текст в unicode
    #36122094
DerAXTYNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СУБД: FireBird 2.1
ORM: Nhibernate
Provider: FirebirdClient-2.5.0

кусочеГ кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
            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);

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

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

При попытки записать в БД объект типа CertificateItem (т.е. ISession.Flush()), где полю Title присваивается не английский текст, выкидывает эксепшен:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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), русский текст в них записывается нормально.
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / незаписать в поле cblob текст в unicode
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]