2009-07-07 14 views
8

मेरे पास मेरे सी # वर्ग में बाइट्स की एक सरणी है, और इसे एनएचबीरनेट का उपयोग करके SQL सर्वर 2005 डेटाबेस में जारी रखने की आवश्यकता है। कॉलम के लिए मुझे किस SQL ​​डेटा प्रकार का उपयोग करना चाहिए, और मुझे मेरे लिए दृढ़ता करने के लिए एनएचबेरांटे का उपयोग करने के बारे में कैसे पता चल सकता है? यदि उत्तर एक कस्टम NHibernate प्रकार है, तो क्या ऐसा करने के लिए चारों ओर घुटने वाला कोई नमूना कोड है?NHibernate का उपयोग कर SQL डेटाबेस में बाइट सरणी को स्टोर करने का सबसे अच्छा तरीका क्या है?

क्या बाइट सरणी को एक स्ट्रिंग में परिवर्तित करना और वर्कहैर कॉलम में इसे जारी रखना आसान होगा?

+1

हम कितने बड़े सरणी हैं के बारे में बातें कर रहे हैं? Varb बाइट्स varbinary भंडारण का उपयोग कर एक बाइट [] के साथ पूरी तरह से काम करते हैं। – sisve

+0

मैंने यह वही बात सोच ली है, लेकिन मेरे मामले में, यह बहुत बड़ा (बहु-एमबी) है - भले ही मैं ब्लॉब्स को संग्रहीत करता हूं कि आकार अभ्यास में फंस गया है। –

+0

बाइट सरणी लंबाई में लगभग 2,000-3,000 हैं –

उत्तर

2

बाइनरीब्लोब को आपके लिए उचित VarBinary कॉलम उत्पन्न करना चाहिए।

0

एक और तरीका है, mssql में "छवि" स्तंभ प्रकार जो गतिशील चित्रों की तरह बहुत बड़ी फ़ाइलों फिट करने के लिए आवंटित उपयोग करते हुए, यहाँ एक उदाहरण है।

hbm.xml:

<property name="Photo" column="Photo" type="BinaryBlob" not-null="true"></property> 

वर्ग संपत्ति:

private byte[] _photo; 

public virtual byte[] Photo 
{ 
    get { return _photo; } 
    set { _photo = value; } 
} 

टेस्ट, एक सहायक का उपयोग कर nhibernate सत्र पाने के लिए:

Image image = Image.FromFile(@"C:\Documents and Settings\someuser\Desktop\logoTop.gif"); 
    byte[] imageByte; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
    image.Save(ms, ImageFormat.Gif); 
    imageByte = ms.ToArray(); 
    } 

    NHSession sessionManager = new NHSession(); 
    using (ISession session = sessionManager.GetSession()) 
    using (ITransaction tx = session.BeginTransaction()) 
    try 
    { 
     MyPhoto photo = new MyPhoto(); 
     photo.Photo = imageByte; 
     session.Save(photo); 
     session.Refresh(photo); 
     Console.WriteLine(photo.EverifyPhotoId); 
     tx.Commit(); 
    } 
    catch (HibernateException) 
    { 
     if (tx.IsActive) 
     tx.Rollback(); 
     throw; 
    } 
संबंधित मुद्दे

 संबंधित मुद्दे