2013-07-07 2 views
0

Это мой первый вопрос в StackOverflow!NHibernate 2 + NHibernate.JetDriver + MS Access: как получить доступ к полю «вложения» таблицы

Я использую NHibernate 2 в моем vb.net проекта Я также использую NHibernate.JetDriver для доступа к базе данных MS Access

У меня есть таблица с именем tblPeople и имеет поле с именем ведьмы «PersonImage» это от «привязанности» тип поля

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="BusinessModel" assembly="NHibernateDemo"> 
    <class name="clsPeople" table="tblPeople"> 
    <id name="ID"> 
     <column name="[ID]" sql-type="int" not-null="true" /> 
    </id> 
    .... 
    <property name="Image"> 
     <column name="[PersonImage]" sql-type="ntext/nvarchar/varbinary/?????" /> 
     <!--varbinary(max)--> 
    </property> 
    </class> 
</hibernate-mapping> 

Вот класс

Namespace BusinessModel 

    Public Class clsPeople 

     Public Overridable Overloads Property ID() As Integer 


     Public Overridable Overloads Property Image() As [byte()/String/String/**?????**] 

    End Class 

End Namespace 

Любые идеи о том, какие типы данных, чтобы выбрать для Mappin gs, чтобы получить фактические изображения из таблицы?

Любая помощь в правильном направлении сделает меня huppy!

Я даже пытался с Hibernate 3 и пользовательским Compilled JetDriver, но я и все, что я делаю, я получаю ошибки Не удался привести значение в поле столбца типа строки к типу BinaryBlobType или Byte [] или что-то за исключением случаев, Я помещаю String, где я получаю a; разделенный список имен файлов, но не более того!

+0

я нашел это, но я не понимаю http://stackoverflow.com/questions/2141149/nhibernate-lazy -loaded-properties – Angelos

+0

Я тоже нашел это, но я не понимаю, если я его буду использовать http://www.martinwilley.com/net/code/nhibernate/usertype.html – Angelos

ответ

0

Вам не нужно указывать тип sql, если это действительно необходимо. Вместо этого вы можете указать «тип» как «String» или «AnsiString».

Во-вторых, я настоятельно рекомендую использовать последнюю версию (3.3.3 на данный момент) NHibernate. Также вы можете рассмотреть другие типы сопоставления, такие как Mapping By Code или атрибуты (но держитесь подальше от свободного :)
PS. Я нашел ваш вопрос от freenode IRC

+0

Трудная вещь здесь, как конвертировать из строки в изображение? Я не уверен, как скомпилировать jetdriver с версией 3.3.3, но теперь я загружаю репозитории, чтобы их выяснить. – Angelos

+0

Я скомпилировал последнюю версию 3.3.3GA с JetDriver и не повезло. независимо от того, что я делаю, я продолжаю получать ошибки. «Невозможно передать значение в столбце поля типа String в тип BinaryBlobType» или «Byte []» или «any», кроме случаев, когда я поставил String, где я получаю a; разделенный список имен файлов, но не более того! Кажется, что это происходит: http: // stackoverflow.ком // Вопросы/6895523/необходимости-с-диез-кода для чтения-многодисковых вложения-из-майкрософт-доступа-Встроенное оборудование – Angelos

0

ok Я думаю, что я достаточно близко!

я использовать это свойство в моем hbm.xml

<property name="FileData"> 
     <column name="Image.FileData" /> 
    </property> 

я использовать это свойство в моем классе clsPeople

Private _FileData As Byte() Public Overridable Перегрузки недвижимости FileData As Byte() Получить Вернуться _FileData End Get Set (значение As Byte())

  If value IsNot Nothing Then 

       Try 
        'get offset to data 
        Dim offsetbytes As Byte() 
        offsetbytes = SubArray(Of Byte)(value, 0, 4) 

        Dim offset = BitConverter.ToInt32(offsetbytes, 0) 
        Console.WriteLine("offset : " & offset) 

        Dim headerBytes() As Byte = SubArray(Of Byte)(value, 0, offset) 
        'Dim allbytes() As Byte = CType(value, Byte()) 
        Dim header = BitConverter.ToString(headerBytes, 0) 

        Dim databytes(0 To (value.Length - offset) - 1) As Byte 
        Array.ConstrainedCopy(value, offset, databytes, 0, value.Length - offset) 
        Dim img As Image = ObjToImg(databytes) 
        img.Save("c:\" & Κωδικός_Ακινήτου & ".jpg", ImageFormat.Jpeg) 
       Catch ex As Exception 

       End Try 

      End If 
      _FileData = value 
     End Set 
    End Property 

я буду держать вас в курсе о том, как это работает на один/более чем один прикрепленных файлов