【问题标题】:SQL query with 6 checkboxes带有 6 个复选框的 SQL 查询
【发布时间】:2016-09-08 15:49:19
【问题描述】:

我有一个带有 6 个复选框的报告屏幕,这些复选框将告诉报告必须显示哪些列。但是当我检查一些复选框并单击按钮时,没有任何反应。这是我的代码:

connect = new SqlConnection(@"Data Source=LP12;Initial Catalog=SmmsData;Integrated Security=True");
connect.Open();

SqlCommand cmd = new SqlCommand();
cmd.Connection = connect;
cmd.CommandText = "SELECT DrukSensor, FlowSensor, TempSensor, KwaliteitSensor, Toerental, OlieVerbruik"
+ " FROM SysteemSensorInfo"
+ " WHERE DrukSensor=@DrukSensor"
+ " AND FlowSensor=@FlowSensor"
+ " AND TempSensor=@TempSensor"
+ " AND KwaliteitSensor=@KwaliteitSensor"
+ " AND Toerental=@Toerental"
+ " AND Olieverbruik=@OlieVerbruik"
;

cmd.Parameters.Add("@DrukSensor", SqlDbType.Bit);
cmd.Parameters.Add("@FlowSensor", SqlDbType.Bit);
cmd.Parameters.Add("@TempSensor", SqlDbType.Bit);
cmd.Parameters.Add("@KwaliteitSensor", SqlDbType.Bit);
cmd.Parameters.Add("@Toerental", SqlDbType.Bit);
cmd.Parameters.Add("@OlieVerbruik", SqlDbType.Bit);

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked;
cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked;
cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked;
cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked;
cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked;
cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked;

DataSet ds = new DataSet();
new SqlDataAdapter(cmd).Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
GridView1.AutoGenerateColumns = true;

当我排除这部分代码时,它可以正常工作,但复选框不起作用。

+ " WHERE DrukSensor=@DrukSensor"
+ " AND FlowSensor=@FlowSensor"
+ " AND TempSensor=@TempSensor"
+ " AND KwaliteitSensor=@KwaliteitSensor"
+ " AND Toerental=@Toerental"
+ " AND Olieverbruik=@OlieVerbruik"
;

cmd.Parameters.Add("@DrukSensor", SqlDbType.Bit);
cmd.Parameters.Add("@FlowSensor", SqlDbType.Bit);
cmd.Parameters.Add("@TempSensor", SqlDbType.Bit);
cmd.Parameters.Add("@KwaliteitSensor", SqlDbType.Bit);
cmd.Parameters.Add("@Toerental", SqlDbType.Bit);
cmd.Parameters.Add("@OlieVerbruik", SqlDbType.Bit);

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked;
cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked;
cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked;
cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked;
cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked;
cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked;

我做错了什么或者我可以用更简单的方式解决我的复选框问题吗?

希望你们有答案!

【问题讨论】:

  • 你能定义不会工作吗?它会抛出错误吗?你没有得到预期的结果吗?您检查过CheckBox*.Checked 对象的值吗?
  • wwont 工作我的意思是屏幕闪烁但不显示任何内容。不幸的是,我没有显示错误。我希望数据网格显示选中的复选框的列。而且我还检查了复选框对象的值,但这对我也没有帮助。

标签: c# sql database checkbox report


【解决方案1】:

尝试改变

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked;

到:

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked?1:0;

对于所有 checkbox.checked 项目。

或者(更好)取出所有参数。添加并将它们更改为 AddWithValue()

cmd.Parameters.AddWithValue("@DrukSensor",CheckBoxDruk.Checked?1:0);

【讨论】:

  • 更好的方法是cmd.Parameters.Add("@DrukSensor", SqlDbType.Bit).Value = CheckBoxDruk.Checked;
  • 不幸的是,这两个选项都不起作用:(屏幕仍然闪烁,但在网格视图中没有显示任何内容。
  • 好吧 - 我误会了。您的代码用于数据库查询。如果您需要帮助将复选框与列相关联,请修改您的问题以显示网格的列和复选框以及用于更改列可见性的逻辑。
【解决方案2】:

里科,

数据库对以下字段有什么数据类型? DrukSensor,FlowSensor,TempSensor,KwaliteitSensor,Toerental,OlieVerbruik

如果他们在数据库中使用小整数,那么以下应该可以工作。

 cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked ? 1 :0;
 cmd.Parameters["@FlowSensor"].Value = CheckBoxFlow.Checked ? 1 : 0;
 cmd.Parameters["@TempSensor"].Value = CheckBoxTemp.Checked ? 1 :0;
 cmd.Parameters["@KwaliteitSensor"].Value = CheckKwaliteit.Checked ? 1:0;
 cmd.Parameters["@Toerental"].Value = CheckBoxToerenTal.Checked ? 1 : 0;
 cmd.Parameters["@OlieVerbruik"].Value = CheckBoxOlieVerbruik.Checked ? 1: 0;

Checkboxes.Checked 是一个布尔值。如果您的字段作为布尔值存储在数据库中,那么您将需要弄清楚如何在参数中指定该值。

cmd.Paramters[@DrukSensor"].Value = CheckBoxDruk.Checked ? "true" : "false";

或类似的。

希望这会有所帮助。

【讨论】:

  • 它们都是我数据库中的浮点数。变化很大吗?
  • 在 db 中使用浮点数来表示布尔值似乎很奇怪,不是吗?数据库中的这些传感器字段是什么?你想用这些复选框做什么?您是否尝试使用复选框在屏幕上显示/不显示列?因为那是完全不同的。
  • 数据库中的数据将是来自传感器的信息,这就是我需要使用浮点数的原因。我需要复选框来告诉我的 sql 查询,以获取我的报告所需的特定行。如果这不起作用,我想我确实需要在屏幕上显示或不显示列。
  • Rico,您似乎希望根据表单上的复选框在网格中显示不同的列。您的一般策略是在表单上手动放置一个网格。您必须手动定义其列(取决于用户希望根据复选框值查看哪些列),然后查询您的表格并填写网格。
【解决方案3】:

改变

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.Checked;

cmd.Parameters["@DrukSensor"].Value = CheckBoxDruk.CheckState;

If(CheckBoxDruk.CheckState == CheckState.Checked)
  cmd.Parameters["@DrukSensor"].Value = 1;
else
  cmd.Parameters["@DrukSensor"].Value = 0;

查看this 了解有关 CheckBox.CheckState 属性的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2010-12-08
    相关资源
    最近更新 更多