我之前問過這個問題,我想我發現了什麼問題,但我沒有。我有一個問題傳遞布爾參數到存儲過程。這裏是我的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被執行。
你有沒有試過用'1'來傳遞'upload'來查看它是否有效? – PoweredByOrange
我剛剛更新了代碼,c#代碼中的上傳變量是全局變量,其初始值爲false。然後它在showDate()中被賦值爲true,但以某種方式在getMonthList()中保持爲false。該代碼只在將getMonthList()中的變量賦值爲true時有效。我不知道爲什麼。 – gg17
我沒有看到任何代碼錯誤。您可能需要在代碼中添加幾個斷點才能找出結果。是'getMonthList()'調用類的同一個實例嗎? – PoweredByOrange