2012-03-24 25 views
2

我正在編寫一個管理員表單。用戶可以或不可以更新PDF文件;如果他不,我處理它在我的形式編碼如下:如何處理DALC中的非必需文件上傳字段?

string fileExt = System.IO.Path.GetExtension(regFormUpload.FileName); 
if (regFormUpload.HasFile) 
{ 
    if (string.Equals(fileExt, ".pdf", StringComparison.OrdinalIgnoreCase)) 
    { 
     Stream pdfFileStream = regFormUpload.PostedFile.InputStream; 
     fileData = new byte[regFormUpload.PostedFile.ContentLength]; 
     pdfFileStream.Read(fileData, 0, regFormUpload.PostedFile.ContentLength); 

     // Call DALC method with uploaded file(s) params 
    } 
    else 
    { 
     regFormCustVal.IsValid = false; 
    } 
} 
else 
{ 
    // Call DALC method indicating "null" for non-uploaded files(s)??? 
} 

有沒有辦法通過一個空的DALC /存儲過程?它作爲varbinary(max)類型存儲在SQL Server中。以前,我曾經根據是否有人上傳文件來編寫單獨的方法,我知道必須有更簡單的方法,但C#語法正在逃避我。

更新 - 2012年5月24日

我還沒有得到一個答案。在我的DALC中,我現在必須調用幾個數據庫更新方法,具體取決於文件(byte [])是否已上傳。無論如何要解決這個問題嗎?我有兩個單獨的文件上傳控件,都是非必填字段。這意味着我必須編碼四個單獨的數據庫更新方法來解決(2^2)的可能性!

+1

你說的「可空字節數組」是什麼意思? – BrokenGlass 2012-03-24 17:47:33

+0

+1更新問題:) – IrishChieftain 2012-03-24 18:14:15

+1

如果擴展名爲「.PDF」,該怎麼辦? – usr 2012-03-24 18:43:41

回答

0

對此的簡單回答是爲DB添加方法編寫了四個覆蓋 - 這正是我首先想要避免的。沒有收到任何反應,顯示了更優雅的方式來做到這一點

1

有沒有這樣的事情作爲可空字節數組,您可以始終將數組設置爲null。

至於文件上傳,你可以像FileUpload.PostedFile的文檔那樣做。

更新:不知道你的DALC如何工作,但將數組傳遞給存儲過程只需確保在數組爲null時通過DBNull.Value

更新2:您必須將DBNull.Value傳遞給過程,因爲DAL只是將該數組設置爲null。

fileData = null; 

然後,當您調用過程時,您必須檢查屬性並傳遞值或DBNull.Value。請參閱this question關於如何做到這一點。

+2

你說「可空字節數組」,我說「可空字節數組」 – 2012-03-24 17:44:08

+0

+1更新問題:) – IrishChieftain 2012-03-24 18:14:08

+0

給出錯誤「無法將類型'System.DBNull'隱式轉換爲'byte []' – IrishChieftain 2012-03-24 18:37:10