2010-02-25 15 views
7

Visual Studio, C#, SQL 2005 sunucusu. .dbml tablo veri türünü .cs dosyasıyla eşleştirmeye çalışıyorum.Görüntü, bir görüntünün veritabanına yüklenmesine izin vermektir.Şu ana kadar çalışmıyor ... Sorun, dosya türü ile ilgili görünüyor fileContent sütunu. birkaç farklı varyasyonlarını denedi, ama hiçbiri çalıştık.Bunun için hangi Datatype kullanılacak, böylece görüntü SQL Server'a yükleyebilir?

<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" /> 

SQL Server Sütunlar
Applicant_PK (PK, int, notnull)
FileName (boş nvarchar (100),)
FileType (nvarchar (100), null)
FileSize (int, null)
FileContent (varbinary (maks), boş)

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 

{ kamu int VeritabanıKimliği {get; set; } public String DosyaAdı {get; set; } public String Dosya Türü {get; set; } public int FileSize {get; set; } public byte [] FileContent {get; set; } kamu ön-uygulama() bu bakmak için

{ 
    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; 
    }   
} 

teşekkürler. Programlamada bir acemiyim, bu yüzden bana bir soru sorarsanız, lütfen bunu aklınızda bulundurun.

+0

Bize hangi hatayı aldığınızı veya hangi belirtilerin olduğunu söyler misiniz? –

+0

Type = "System.Byte []" ve DbType = "image" denedim ve NullRefferenceExceptions kullanıcı kodu tarafından işlenmedi.
Nesne başvurusu, bir nesnenin iznine ayarlanmamış.
Nesne örneği oluşturmak için "yeni" anahtar sözcüğünü kullanın. Yöntemi aramadan önce nesnenin boş olup olmadığını kontrol edin. – Javier

cevap

1

Sana db bağlantısı oluşturma ve yapıcı eklemek için çalışıyoruz ... sorun bakın. senin sınıf olmalıdır

yüzden

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; 
    } 
} 

gibi tanımlanır ve daha sonra bilgisini kullandığınız yerel çalışıyorsanız ben, bağlantı dizesini tekrar kontrol ediyorum fonksiyonu

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

yürütmek "" THESQLSERVER için ve Başlangıç ​​Kataloğu = NameOfDataBase olduğundan emin olun. Hangi nesnenin boş olduğundan emin değilseniz, hata ayıklayıcısını kullanarak adım atmayı deneyin ve db değişkeninin üzerine gelin. Bunun boş olmadığından emin olun.

Ayrıca işler kötü gittiğinde yararlı iyi sapı için bir dene yakalamak var bulabilirsiniz. Böylece istisna işlemlerini okumak isteyebilirsiniz.

Son olarak, okumadan önce buhar başında olduğundan emin olmak için kötü bir fikir değil ya hep gibi sıfırlayabilirsiniz:

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

Umut,

Eddy

İlgili konular