2010-02-25 17 views
7

Visual Studio,c#,SQL 2005服務器。 我試圖匹配.dbml表格數據類型與我的.cs文件。目標是允許圖像加載到數據庫。到目前爲止它不工作。問題似乎與文件類型相關該FileContent列。我已經嘗試了幾種不同的變化,但都沒有奏效。使用什麼數據類型以便圖像可以上傳到SQL Server?

<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列
Applicant_PK(PK,INT,NOTNULL)
文件名(爲nvarchar(100),NULL)
文件類型(nvarchar(100),null)
FileSize(int,null)
FileContent(varbinary(max),空)

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 {獲得;組; } public String FileName {get;組; } public String FileType {get;組; } public int FileSize {get;組; } public byte [] 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

你能告訴我們你收到了什麼錯誤或有什麼症狀嗎? – 2010-02-25 18:23:50

+0

我嘗試了Type =「System.Byte []」和DbType =「image」,並收到NullRefferenceExceptions未被用戶代碼處理。
對象引用未設置爲對象的一個​​對象。
使用「new」關鍵字創建對象實例。在調用方法之前檢查以確定對象是否爲null。 – Javier 2010-02-25 18:54:30

回答

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,並確保Initial Catalog = NameOfDataBase。如果您不確定哪些對象爲空,請嘗試在調試器中將其穿過並懸停在數據庫變量上。確保它不爲空。

你也可能發現有一個嘗試抓住,以更好地處理事情變糟時很有用。所以你可能想閱讀異常處理。

最後,它不是一個壞主意,以確保蒸汽是在開始閱讀之前,或者你可以隨時重置它是這樣:

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

希望有點幫助,

埃迪

相關問題