2010-02-25 5 views
7

विजुअल स्टूडियो, सी #, एसक्यूएल 2005 सर्वर। मैं अपने .cs फ़ाइल के साथ .dbml तालिका डेटा प्रकार से मिलान करने का प्रयास कर रहा हूं। लक्ष्य है कि किसी छवि को डेटाबेस में लोड करने दें। अब तक यह काम नहीं कर रहा है। यह समस्या फ़ाइल प्रकार से संबंधित प्रतीत होती है FileContent स्तंभ। मैं कई अलग अलग रूपों की कोशिश की है, लेकिन कोई भी काम किया है।इसके लिए उपयोग करने के लिए डेटाटाइप क्या है ताकि छवि SQL सर्वर पर अपलोड हो सके?

<Column Name="FileName" Type="System.String" DbType="NVarChar(100)" CanBeNull="true" /> 
<Column Name="FileType" Type="System.String" DbType="NVarChar(100)" CanBeNull="true" /> 
<Column Name="FileSize" Type="System.int32" DbType="int" CanBeNull="true" /> 
<Column Name="FileContent" Type="System.Data.Linq.Binary" DbType="varbinary(MAX)" CanBeNull="true" /> 

एसक्यूएल सर्वर कॉलम
Applicant_PK (पी, पूर्णांक, notnull)
फ़ाइलनाम (nvarchar (100), नल)
FileType (nvarchar (100), शून्य)
फ़ाइलसाइज (int, null)
फ़ाइल सामग्री (varbinary (अधिकतम), अशक्त)

void CreatePreApplication() 
{ 
    Pre_Application = new PreApplication(); 
    Pre_Application.FileName = Path.GetFileName(ctrFile.PostedFile.FileName); 
    Pre_Application.FileType = ctrFile.PostedFile.ContentType; 
    Pre_Application.FileSize = ctrFile.PostedFile.ContentLength; 
    byte[] fileContent = new byte[ctrFile.PostedFile.ContentLength]; 
    ctrFile.PostedFile.InputStream.Read(fileContent, 0, ctrFile.PostedFile.ContentLength); 
    Pre_Application.FileContent = fileContent;  

public class PreApplication 

{ सार्वजनिक पूर्णांक DatabaseId {मिल; सेट; } सार्वजनिक स्ट्रिंग फ़ाइल नाम {प्राप्त करें; सेट; } सार्वजनिक स्ट्रिंग फ़ाइल टाइप {प्राप्त करें; सेट; } सार्वजनिक int फ़ाइल आकार {प्राप्त करें; सेट; } सार्वजनिक बाइट [] FileContent {get; सेट; } सार्वजनिक PreApplication()

{ 
    PreApplicationsDataContext db = 
     new PreApplicationsDataContext(
      "Data Source=THESQLSERVER;Initial Catalog=THECONNECTIONSTRING;Integrated Security=True"); 
    tblPreApplication preApp = new tblPreApplication(); 
    preApp.FileName = FileName; 
    preApp.FileType = FileType; 
    preApp.FileSize = FileSize; 
    preApp.FileContent = (byte[])FileContent; 
    try 

    { 
     db.tblPreApplications.InsertOnSubmit(preApp); 
     db.SubmitChanges(); 
     DatabaseId = preApp.Applicant_PK; 
     return preApp.Applicant_PK; 
    } 
    catch 
    { 
     DatabaseId = 0; 
     return 0; 
    }   
} 

इस पर देख रहे हैं के लिए धन्यवाद। मैं प्रोग्रामिंग में नौसिखिया हूं, इसलिए यदि आप मुझसे कोई प्रश्न पूछते हैं, तो कृपया इसे ध्यान में रखें।

+0

क्या आप हमें बता सकते हैं कि आप कौन सी त्रुटि प्राप्त कर रहे हैं या कौन से लक्षण हैं? –

+0

मैंने टाइप = "System.Byte []" और DbType = "image" की कोशिश की और उपयोगकर्ता कोड द्वारा NullRefferenceExceptions को अनचाहे प्राप्त हुआ।
ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट की आबादी पर सेट नहीं है।
ऑब्जेक्ट उदाहरण बनाने के लिए "नया" कीवर्ड का उपयोग करें। विधि को कॉल करने से पहले ऑब्जेक्ट शून्य है या नहीं, यह निर्धारित करने के लिए जांचें। – Javier

उत्तर

1

मुझे समस्या दिखाई देती है ... आप डीबी कनेक्शन बना रहे हैं और कन्स्ट्रक्टर में डालने की कोशिश कर रहे हैं।

अपने वर्ग होना चाहिए ताकि

public PreApplication() { 
} 

public DoInsert { 
    PreApplicationsDataContext db = 
    new PreApplicationsDataContext("Data Source=THESQLSERVER;Initial Catalog=THECONNECTIONSTRING;Integrated Security=True"); 
    tblPreApplication preApp = new tblPreApplication(); 
    preApp.FileName = FileName; 
    preApp.FileType = FileType; 
    preApp.FileSize = FileSize; 
    preApp.FileContent = (byte[])FileContent; 
    try { 
    db.tblPreApplications.InsertOnSubmit(preApp); 
    db.SubmitChanges(); 
    DatabaseId = preApp.Applicant_PK; 
    return preApp.Applicant_PK; 
    } catch { 
    DatabaseId = 0; 
    return 0; 
    } 
} 

तरह परिभाषित किया गया है और फिर अपने निष्पादित समारोह

void CreatePreApplication() { 
    Pre_Application p = new PreApplication(); 
    p.FileName = Path.GetFileName(ctrFile.PostedFile.FileName); 
    p.FileType = ctrFile.PostedFile.ContentType; 
    p.FileSize = ctrFile.PostedFile.ContentLength; 
    byte[] fileContent = new byte[ctrFile.PostedFile.ContentLength]; 
    ctrFile.PostedFile.InputStream.Read(fileContent, 0, ctrFile.PostedFile.ContentLength); 
    p.FileContent = fileContent; 

    //do the insert after you have assigned all the variables 
    p.DoInsert(); 
} 
0

मैं, अपने कनेक्शन स्ट्रिंग की दोबारा जांच करें यदि आप स्थानीय रूप से उपयोग करने के लिए काम कर रहे हैं "।" THESQLSERVER के लिए, और सुनिश्चित करें कि प्रारंभिक कैटलॉग = NameOfDataBase। यदि आप सुनिश्चित नहीं हैं कि ऑब्जेक्ट शून्य है, तो डीब परिवर्तक पर इसे डीबगर में घुमाएं और होवर करें। सुनिश्चित करें कि शून्य नहीं है।

चीजें खराब होने पर आपको बेहतर तरीके से संभालने का प्रयास करने में भी उपयोगी लग सकता है। तो आप अपवाद हैंडलिंग पर पढ़ना चाह सकते हैं।

अंत में, यह नहीं एक बुरा विचार यकीन है कि भाप शुरुआत में है बनाने के लिए पढ़ने से पहले है या आपके पास हमेशा इस तरह के रूप में यह रीसेट कर सकते हैं:

// Ensure stream is at 0 index. 
if (stream.Position != 0) 
{ 
    stream.Seek(0, SeekOrigin.Begin); 
} 

आशा है कि एक सा मदद करता है,

एड़ी

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

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