如果没有选择文件,如何将二进制文件设置为null

时间:2014-04-30 23:23:38

标签: c# asp.net

我正在使用此代码byte[] bin = new byte[FileUpload.PostedFile.ContentLength];,但我正在设计的应用程序可能会也可能不会选择文件。

如果用户选择文件,代码工作正常,但如果我们不想上传任何文件,则会出现错误,说明"对象引用未设置为对象的实例。 " 如果我对我的代码进行以下更改。它在insert sql语句中给出了错误,说没有给sql参数赋值

if(FileUploadSTR.HasFile)
{
    bin= new byte[FileUploadSTR.PostedFile.ContentLength];
}
else
{
    bin= null;
}

sql就在这里

SqlCommand command = new SqlCommand("INSERT INTO SponsorInput (SerialNumber, Requestor, Sponsor, BusinessJustification, DebugFile, DebugFileName, ProductName, SigningType, FirmwareVersion, FirmwareDescription, SmokeTestResult) 
SELECT CASE WHEN @SerialNumber = '' THEN NULL ELSE @SerialNumber END, CASE WHEN @Requestor = '' THEN NULL ELSE @Requestor END, 
    CASE WHEN @Sponsor = '' THEN NULL ELSE @Sponsor END, CASE WHEN @BusinessJustification = '' THEN NULL ELSE @BusinessJustification END, CASE WHEN @DebugFile = '' THEN NULL ELSE @DebugFile END, 
    CASE WHEN @DebugFileName = '' THEN NULL ELSE @DebugFileName END, 
    CASE WHEN @ProductName = '' THEN NULL ELSE @ProductName END, 
    CASE WHEN @SigningType = '' THEN NULL ELSE @SigningType END, 
    CASE WHEN @FirmwareVersion = '' THEN NULL ELSE @FirmwareVersion END, 
    CASE WHEN @FirmwareDescription = '' THEN NULL ELSE @FirmwareDescription END, 
    CASE WHEN @SmokeTestResult = '' THEN NULL ELSE @SmokeTestResult END", conn);

sql参数如下所示`

SqlParameter SmokeTestResult = new SqlParameter("@SmokeTestResult", SqlDbType.VarBinary, 8000);
if (bin== null)
{
    bin = new byte[0];
}
else
{
    SmokeTestResult.Value = bin;
}
command.Parameters.Add(SmokeTestResult);`

由于

2 个答案:

答案 0 :(得分:1)

做这样的事情:

postedFile = FileUpload.PostedFile;
byte[] bin;
if (postedFile == null)
  bin = new byte[0];
else
  bin = new byte[FileUpload.PostedFile.ContentLength];

答案 1 :(得分:0)

最简单的方法就是检查FileUpload.PostedFile == null并且不做任何需要它的事情