【发布时间】:2013-07-06 08:14:42
【问题描述】:
我之前问过这个问题,我以为我找到了问题所在,但我没有。我在将布尔参数传递给存储过程时遇到问题。这是我的 C# 代码:
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。
【问题讨论】:
-
您是否尝试过为
upload传递“1”以查看它是否有效? -
我刚刚更新了代码,c#代码中的上传变量是全局的,初始值为false。然后它在 showDate() 中被分配为 true,但不知何故在 getMonthList() 中保持为 false。只有当我在 getMonthList() 中为上传变量分配 true 时,该代码才有效。我不知道为什么。
-
我看不出代码有什么问题。您可能需要在代码中放置几个断点才能弄清楚。
getMonthList()是在类的同一个实例上调用的吗? -
尝试将
IF @upload = 1更改为IF @upload <> 0。您假设true是1,这通常是一个错误的假设。 -
@KenWhite,
bit值只能是 0 或 1。这是一个有效的假设。