将布尔参数传递给SQL Server存储过程

我之前问了这个问题,我以为我发现了问题所在,但我没有。 我在将布尔参数传递给存储过程时遇到问题。 这是我的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。

我也倾向于指定布尔参数的类型。 也许是这样的;

  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语句放在using块中,以确保在运行后清理资源。