2013-07-08 80 views
2

我之前問過這個問題,我想我發現了什麼問題,但我沒有。我有一個問題傳遞布爾參數到存儲過程。這裏是我的C#代碼:將一個布爾參數傳遞給SQL Server存儲過程

public bool upload = false; 

protected void showDate(object sender, EventArgs e) 
{ 
     if (Radio1.Checked) 
     { 
      upload = true; 
      Radio2.Checked = false; 
      date_div.Visible = true; 
      date_div2.Visible = false; 
     } 
} 

protected void getMonthList() 
{ 
    selectedYear = year.SelectedValue.ToString(); 

    SqlConnection connection = new SqlConnection(connString); 

    SqlCommand cmd = connection.CreateCommand(); 
    cmd.CommandType = CommandType.StoredProcedure; 

    connection.Open(); 

    cmd.CommandText = "getMonth"; 
    cmd.Parameters.Add("@year", SqlDbType.Int, 0).Value = Convert.ToInt32(selectedYear); 
    cmd.Parameters.AddWithValue("@upload", upload); 

    DataTable dt = new DataTable(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 

    da.Fill(dt); 

    month.DataSource = dt; 
    month.DataTextField = "month"; 
    month.DataValueField = "monthValue"; 
    month.DataBind(); 
    month.Items.Insert(0, new ListItem("Select", "0")); 
} 

這是存儲過程getMonth

ALTER PROCEDURE [dbo].[getMonth] 
    @year int, 
    @upload Bit 
AS 
BEGIN 
    IF @upload = 1 
    BEGIN 
    SELECT distinct datename(mm, Upload_date) month 
    ,month (upload_date) monthValue 
    FROM dbo.RESOLVED 
    WHERE datepart(yyyy, upload_date) = @year 
    ORDER by 2 
    END 
    ELSE 
    BEGIN 
    SELECT distinct datename(mm, substring(CREATE_DT,1,2) + '.' +  substring(CREATE_DT,3,2) + '.' + substring(CREATE_DT,5,4)) month 
    ,month (substring(CREATE_DT,1,2) + '.' + substring(CREATE_DT,3,2) + '.' + substring(CREATE_DT,5,4)) monthValue 

    FROM dbo.RESOLVED 
    WHERE datepart(yyyy, substring(CREATE_DT,1,2) + '.' + substring(CREATE_DT,3,2) + '.' + substring(CREATE_DT,5,4)) = @year 
    ORDER by 2 
END 

存儲過程應該填充下拉列表。它應該執行IF語句,但是IF被跳過而ELSE被執行。

+2

你有沒有試過用'1'來傳遞'upload'來查看它是否有效? – PoweredByOrange

+0

我剛剛更新了代碼,c#代碼中的上傳變量是全局變量,其初始值爲false。然後它在showDate()中被賦值爲true,但以某種方式在getMonthList()中保持爲false。該代碼只在將getMonthList()中的變量賦值爲true時有效。我不知道爲什麼。 – gg17

+0

我沒有看到任何代碼錯誤。您可能需要在代碼中添加幾個斷點才能找出結果。是'getMonthList()'調用類的同一個實例嗎? – PoweredByOrange

回答

1

我傾向於指定布爾參數的類型也。也許是這樣的;

  SqlParameter param = new SqlParameter(); 
      param.ParameterName = "@upload"; 
      param.Value = upload; 
      param.DbType = System.Data.DbType.Boolean 
      cmd.Parameters.Add(param); 

也許還要檢查使用斷點,甚至System.Diagnostics.Debug.Write("@Upload is " + upload),以確保您傳遞你認爲你進入。此外,

最後,我建議把你的SqlConnectionSqlCommand statments在using塊以確保資源在運行後得到清理。

+0

謝謝!我是新來的,不知道System.Diagnostics.Debug.Write,它幫助了我。我有另一個方法getYearList(),它在getMonthList()之前被調用,'upload'停留true.getYearList()被調用'upload'後會再次變爲false,所以我改變了代碼來聲明'upload'爲stat ic現在很好。 – gg17

+0

很高興我能幫到你。 –

相關問題