C# 如何在DALC中处理非必需的文件上载字段?

C# 如何在DALC中处理非必需的文件上载字段?,c#,asp.net,ado.net,C#,Asp.net,Ado.net,我正在编写一个管理员表单。用户可以或不可以更新PDF文件;如果他这样做了,我会按照我的表格处理,代码如下: string fileExt = System.IO.Path.GetExtension(regFormUpload.FileName); if (regFormUpload.HasFile) { if (string.Equals(fileExt, ".pdf", StringComparison.OrdinalIgnoreCase)) { Stream

我正在编写一个管理员表单。用户可以或不可以更新PDF文件;如果他这样做了,我会按照我的表格处理,代码如下:

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)???
}
是否有方法将null传递给DALC/存储过程?它以varbinary(max)类型存储在SQLServer中。以前,我习惯于根据是否有人上传了文件来编写不同的方法,我知道必须有一种更简单的方法,但C#语法让我难以理解

更新-2012年5月24日


我还没有找到答案。在我的DALC中,我当前必须调用几个DB更新方法,这取决于文件(字节[])是否已上载。有什么办法可以解决这个问题吗?我有两个单独的文件上载控件,都是非必填字段。这意味着我必须编写多达四个单独的DB更新方法来考虑(2^2)的可能性

没有可为空的字节数组,您可以始终将数组设置为空

fileData = null;
至于文件上传,您可以按照示例中的文档建议进行

更新:不确定DALC如何工作,但要将数组传递给存储过程,请确保在数组为null时传递
DBNull.Value

更新2:您必须将
DBNull.Value
传递给过程,因为DAL只需将数组设置为null

fileData = null;

然后,当调用过程时,必须检查属性并传递值或
DBNull.value
。请参阅如何执行此操作。

对此的简单答案是为DB Add方法编写四个覆盖代码-这是我最初试图避免的。没有收到显示更优雅的方式的响应。

您说“可空字节数组”,我说“可空字节数组”。给出错误“无法隐式将类型“System.DBNull”转换为“byte[]'Had to uncheck this as answer-不回答如何处理字节数组不能为空的事实。更新问题。您所说的“可为空的字节数组”到底是什么意思?如果扩展名为“.PDF”?很好,谢谢:)更新问题。如果扩展名为“.pdf2”?:)(使用string.Equals(fileExt,.PDF“,StringComparison.OrdinalIgnoreCase)您可能已经知道了这一点……对于要接受null的存储过程,我会将变量声明为@myvar varbinary(max)=null;