c# - 将 Windows 窗体文本框输入值与数据库 C# SQL 中的值进行比较

标签 c# mysql winforms visual-studio

我希望将 Windows 窗体文本框中的输入与数据库中的字段进行比较。该表是“产品”,字段是“重新订购级别”。如果文本框中输入的值小于重新订购级别,我需要一个消息框来显示“请立即订购”。我对 C# 完全陌生,不确定这些是否有意义,但我会在下面付出努力,以防任何人都能弄清楚我在说什么!提前非常感谢您!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Text.RegularExpressions;


namespace rescue_centre
{
public partial class FrmStock : Form
{
    public FrmStock()
    {
        InitializeComponent();
    }

    private void FrmStock_Load(object sender, EventArgs e)
    {

        refresh_data();
    }
    public void refresh_data()
    {
        string Query = "select * from stock";
        MySqlConnection mycon = new     MySqlConnection("datasource=localhost;username=root;password='';database=fsd;");            MySqlCommand cmd = new MySqlCommand(Query, mycon);
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        MySqlDataReader Mdr;

        adapter.SelectCommand = cmd;
        DataTable dTable1 = new DataTable();
        adapter.Fill(dTable1);
        DtgStock.DataSource = dTable1;

        mycon.Open();
        Query = "Select * from stock";
        cmd = new MySqlCommand(Query, mycon);
        Mdr = cmd.ExecuteReader();

        CmbPrd.Items.Clear();
        while (Mdr.Read())
        {
            CmbPrd.Items.Add(Mdr.GetString("ProdCode"));
        }
        mycon.Close();

        mycon.Open();
        Query = "Select * from stock";
        cmd = new MySqlCommand(Query, mycon);
        Mdr = cmd.ExecuteReader();

        CmbLoc.Items.Clear();
        while (Mdr.Read())
        {
            CmbLoc.Items.Add(Mdr.GetString("LocCode"));
        }
        mycon.Close();
    }
   private void QtyTxt_Validating(object sender, CancelEventArgs e)
    {
        string query = "Select ReOrderlevel from Product where (ProdCode)='" + CmbPrd.Text + "';";

        MySqlConnection mycon = new MySqlConnection("datasource=localhost;username=root;password='';database=fsd");
        MySqlCommand cmd = new MySqlCommand(query, mycon);

        if
            QtyTxt.Text<ReOrderLevel
            MessageBox.Show("Stock Low Please Order Now")

        mycon.Open();
        cmd.ExecuteNonQuery();
        mycon.Close();
        refresh_data();

最佳答案

您需要在 if 语句之前执行查询。 我假设 ReOrderlevel 是一个整数,并且您的查询始终返回一行或多行。

MySqlCommand cmd = new MySqlCommand(query, mycon);
int ReOrderLevel = Convert.ToInt32(cmd.ExecuteScalar());

if(Convert.ToInt32(QtyTxt.Text) < ReOrderLevel)
{
    MessageBox.Show("Stock Low Please Order Now");
}

顺便说一句,您不想为 Stock 表查询数据库 3 次。在使用 adapter.Fill(dTable1); 之后的 refresh_data 方法上,您可以像这样加载组合框:

CmbPrd.Items.Clear();
CmbLoc.Items.Clear();
foreach (DataRow row in dTable1.Rows)
{
   CmbPrd.Items.Add((string)row["ProdCode"]);
   CmbLoc.Items.Add((string)row["LocCode"]);
}

并且请使用参数化查询以避免SQL注入(inject)。 代码示例

string query = "Select ReOrderlevel from Product where (ProdCode)= @prodcode;";
cmd.Parameters.AddWithValue("@prodcode", CmbPrd.Text); 

关于c# - 将 Windows 窗体文本框输入值与数据库 C# SQL 中的值进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314077/

相关文章:

Winforms ClickOnce 发布因 app.config 转换而失败

c# - 从引发事件的外部线程更新控件

c# - 自动生成的默认连接字符串与手动添加的连接字符串

php - 将已弃用的 PHP SQL 命令转换为 PDO

mysql - 如何在 typeorm 和 Nest.js 中设置 bool 验证

php - 循环检查并删除图像(如果不存在)

c# - 互操作 Excel 很慢

c# - 如何检测所选打印机的类型是否为点阵?

从另一个类调用方法后,C# 设置 Form Parent

winforms - 在 Windows 中更改另一个进程的任务栏图标