none
如何判斷sqlcommand.parameters.add, 如果是空值就不更新 RRS feed

  • 問題

  • 各位前輩好,請教一個問題:

    下面的程式是要把上傳檔案的檔名寫進資料庫裡

    cmd.Parameters.Add(@id, table_id);
    cmd.Parameters.Add("@scheduleFile1", FileUpload1.FileName);
    cmd.Parameters.Add("@scheduleFile2", FileUpload2.FileName);
    cmd.Parameters.Add("@scheduleFile3", FileUpload3.FileName);
    cmd.Parameters.Add("@scheduleFile4", FileUpload4.FileName);

    cmd.CommandText = "update table set scheduleFile1 = @scheduleFile1, scheduleFile2 = @scheduleFile2, scheduleFile3 = @scheduleFile3, scheduleFile3 = @scheduleFile3, scheduleFile4 = @scheduleFile4 where id = @id";

     

    但是如果是更新資料的話,我不一定會更新每一個上傳的檔案,如果按照上面的寫法(如果沒有要更新檔案),我會將原本的檔名給覆蓋掉(變成空值)。
    所以我就要判斷這個上傳的檔案是否為空值,如果是空值就不更新這個欄位。
    我只有想到很笨的方法如下:

    //判斷FileUpload.FileName有沒有值,空值的話cmd.commandtext就不將參數寫進去
    if (FileUpload1.FileName == "")
    {
            cmd.CommandText = "update table set scheduleFile2 = @scheduleFile2, scheduleFile3 = @scheduleFile3, scheduleFile3 = @scheduleFile3, scheduleFile4 = @scheduleFile4 where id = @id";
    }

    如果是一個檔案還可以用這個方法,可是我有多個檔案要上傳,如果用這種寫法感覺很笨。

    請問各位前輩,有沒有一種寫法是可以在cmd.Parameters.Add裡面判斷是空值就不更新資料的方法嗎

    或者是可以在其他地方判斷呢???

    非常謝謝各位了

    2011年8月3日 上午 03:24

解答

  • 修改sql語法,例如:

    set scheduleFile1 = case when @scheduleFile1='' then scheduleFile1 else @scheduleFile1 end

    • 已提議為解答 TerryChuang 2011年8月3日 上午 03:45
    • 已標示為解答 iam4000 2011年8月3日 上午 03:57
    2011年8月3日 上午 03:42

所有回覆

  • 多檔上傳一樣做法,只是要跑迴圈
    coding or not
    2011年8月3日 上午 03:37
  • 修改sql語法,例如:

    set scheduleFile1 = case when @scheduleFile1='' then scheduleFile1 else @scheduleFile1 end

    • 已提議為解答 TerryChuang 2011年8月3日 上午 03:45
    • 已標示為解答 iam4000 2011年8月3日 上午 03:57
    2011年8月3日 上午 03:42
  • 多檔上傳一樣做法,只是要跑迴圈
    coding or not

    看到Shinyo.her兄的方法,讓我想到我曾經這樣做過,一樣是跑回圈的方式來更新,不過一段SQL只更新一個欄位。用這種方式必須注意SQL的長度以及記得用Transaction包起來。

    HttpFileCollection hfcAttachs = Request.Files
    
    cmd.Parameters.Add(@id, table_id);
    cmd.CommandText = String.Empty;
    for (int i = 0; i < hfcAttachs.Count; i++)
    {  
     if (!string.IsNullOrEmpty(hfcAttachs[i].FileName))
     {
      cmd.Parameters.Add("@scheduleFile" + i.ToString(), hfcAttachs[i].FileName);
      cmd.CommandText &= "update table set scheduleFile" + i.ToString() + " = @scheduleFile" + i.ToString() + " where id = @id;";
     }
    }
    



    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年8月3日 上午 03:58
  • 謝謝阿尼大大的解決方案

    原來直接在Sql語法裡判斷就可以了

    我一直把方向給搞錯了,一直在sqlcommand裡鑽牛角尖

    也謝謝其它的人建議

    2011年8月3日 上午 04:02