|
незаписать в поле cblob текст в unicode
#36122094
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
СУБД: FireBird 2.1
ORM: Nhibernate
Provider: FirebirdClient-2.5.0
кусочеГ кода:
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);
В бд:
TITLE CBLOB_DOMAIN /* CBLOB_DOMAIN = BLOB SUB_TYPE 1 SEGMENT SIZE 1024 */
charset = UTF8 для этого поля.
Маппинг поля в коде:
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 присваивается не английский текст, выкидывает эксепшен:
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), русский текст в них записывается нормально.
|
|
|