【问题标题】:Condition statements for a single row data value in a database数据库中单行数据值的条件语句
【发布时间】:2019-02-17 15:43:19
【问题描述】:


我正在使用 C# 创建一个 windows 窗体。
我正在尝试为通过单击按钮从我的数据库中检索到的特定值设置条件语句。该列的数据类型是“整数”。

下面是我的代码:

 string checkquantity = "SELECT  `inventory_item`.`Item_Quantity_Available`FROM `inventory_item` , `patient`, `out_treatment`WHERE `inventory_item`.`Item_ID` = `out_treatment`.`Inventory_ID`AND `patient`.`Patient_ID` = `out_treatment`.`Patient_ID`AND `out_treatment`.`Patient_ID`= '" + pid + "' ";
            MySqlCommand selectout = new MySqlCommand(checkquantity, connect);
            MySqlDataAdapter selectdata = new MySqlDataAdapter(checkquantity, connect);
            DataTable selecttable = new DataTable();
            selectdata.Fill(selecttable);
            DataSet ds = new DataSet();
            selectdata.Fill(selecttable);
            selectdata.Fill(ds);
            int i = ds.Tables[0].Rows.Count;
            if ( i <= 0)
            {
                MessageBox.Show("Out of Stock");
            }

我是 C# 新手。
我不认为int i = ds.Tables[0].Rows.Count; 是正确的方式。
非常感谢任何帮助。

【问题讨论】:

  • 您的选择中有 3 个表,但没有连接...如果您只想要查询结果,则不应使用 DataTable/DataSet,请使用 selectout.ExecuteScalar() 命令返回第一行的第一列。
  • 好的..我会试试的
  • 您将 PID 变量连接到您的 select 语句中。阅读“SQL 注入”。这是一件非常的坏事。
  • selectout.executescalar() 不工作
  • 我建议使用更合适的方式来处理Entity Framework docs.microsoft.com/en-us/ef或SqlKata sqlkata.com等数据库

标签: c# mysql sql winforms


【解决方案1】:

首先,就像@Flydog57 所说,您不应该连接您的sql 查询。最好的方法是使用参数,例如:

string checkquantity = "SELECT  i.Item_Quantity_Available " +
                       "  FROM inventory_item i JOIN out_treatment t ON i.Item_Id = t.Inventory_ID " +
                       "                        JOIN patient p ON t.Patient_ID = p.PatiendID " +           
                       " WHERE t.Patient_ID = @Patiend_ID";
MySqlCommand selectout = new MySqlCommand(checkquantity, connect);
// set the parameter value
selectout.Parameters.AddWithValue("@Patiend_ID", patient_id_value);
MySqlDataReader rdr = cmd.ExecuteReader();          

if (rdr.Read())
{
    if ((int)rdr["Item_Quantity_Available"] == 0)

        MessageBox.Show("Out of Stock");
}

其次,您可以使用 MySqlDataReader 来验证 Item_Quantity_Available 是否等于 0,就像前面的示例一样。否则,如果你只是想验证是否有数据,条件可能是这样的:

if (!rdr.Read())
{
    MessageBox.Show("Out of Stock");
}

第三个改进是用join子句连接表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-15
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多