VS实现销售系统查询

img



```c#
private void button5_Click(object sender, EventArgs e)
        {
            if (textBox2.Text == "" && textBox3.Text == "")
            {
                MessageBox.Show("对不起,请输入价格范围");
                textBox2.Focus();
                return;
            }
                        
            if (textBox2.Text != "" && textBox3.Text == "")
                strSql = "Select Price * From BasicInformationAboutCars where Price  >=  textBox2.text";
            else if(textBox2.Text== "" && textBox3.Text != "")
                strSql = "Select Price * From BasicInformationAboutCars where Price<= + textBox3.Text + ";
            else
                strSql = "Select Price * From BasicInformationAboutCars where Price>= + textBox2.Text + and Price<= + textBox3.Text + ";
            
            exeSQL(strSql);
        }

问题:在textbox2、3中输入数字范围,查询结果不显示?报错:至少一个参数没有被指定值怎么回事?

根据您提供的代码,报错信息"至少一个参数没有被指定值"是由于您在SQL语句中没有正确地引用文本框的值。在SQL语句中,您需要使用字符串拼接的方式将文本框中的值与SQL语句连接起来。

以下是修改后的代码示例:

private void button5_Click(object sender, EventArgs e)
{
    if (textBox2.Text == "" && textBox3.Text == "")
    {
        MessageBox.Show("对不起,请输入价格范围");
        textBox2.Focus();
        return;
    }

    if (textBox2.Text != "" && textBox3.Text == "")
        strSql = "Select Price * From BasicInformationAboutCars where Price >= " + textBox2.Text;
    else if (textBox2.Text == "" && textBox3.Text != "")
        strSql = "Select Price * From BasicInformationAboutCars where Price <= " + textBox3.Text;
    else
        strSql = "Select Price * From BasicInformationAboutCars where Price >= " + textBox2.Text + " and Price <= " + textBox3.Text;

    exeSQL(strSql);
}

在修改后的代码中,使用了字符串拼接的方式将文本框的值与SQL语句连接起来,以正确地传递参数值给SQL查询语句。


private void button5_Click(object sender, EventArgs e)
{
    if (textBox2.Text == "" && textBox3.Text == "")
    {
        MessageBox.Show("对不起,请输入价格范围");
        textBox2.Focus();
        return;
    }
                        
    string strSql = ""; 

    if (textBox2.Text != "" && textBox3.Text == "")
        strSql = "SELECT * FROM BasicInformationAboutCars WHERE Price >= " + textBox2.Text;
    else if (textBox2.Text == "" && textBox3.Text != "")
        strSql = "SELECT * FROM BasicInformationAboutCars WHERE Price <= " + textBox3.Text;
    else
        strSql = "SELECT * FROM BasicInformationAboutCars WHERE Price >= " + textBox2.Text + " AND Price <= " + textBox3.Text;

    exeSQL(strSql);
}

你这代码问题还挺多的:
1、变量 strSql 没有在方法内部声明和初始化,需要在方法内部的合适位置添加声明和初始化语句。
2、在 SQL 查询语句中,Select Price * From BasicInformationAboutCars 中的 * 符号是多余的,应该移除。
3、后面几个 textBox3.Text + 类似中的文本框变量应该使用字符串连接符 + 进行拼接,而不是直接写在字符串中

另外,如果是练手无所谓,项目的话,要注意SQL 注入攻击

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/193349
  • 你也可以参考下这篇文章:VS创建透明TextBox控件
  • 以下回答来自chatgpt:

    根据问题描述,可能是在查询时未将textbox2和textbox3中的值传递给查询语句,从而导致查询失败。解决方法是在查询按钮的点击事件中,将textbox2和textbox3中的值传递给查询语句,然后将结果显示在datagridview中。具体代码如下:

    private void button1_Click(object sender, EventArgs e)
    {
        string sql = "select * from sales where sales_price between @minPrice and @maxPrice";
        // 设置参数值
        cmd.Parameters.AddWithValue("@minPrice", textbox2.Text);
        cmd.Parameters.AddWithValue("@maxPrice", textbox3.Text);
        DataTable dt = new DataTable();
        try
        {
            // 执行查询语句
            SqlDataReader dr = cmd.ExecuteReader();
            dt.Load(dr);
            //将结果显示在datagridview中
            dataGridView1.DataSource = dt;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    另外,需要注意查询语句中的参数名需要与cmd.Parameters.AddWithValue()方法中的参数名保持一致,推荐使用@符号作为参数名的前缀,以避免与其他可能存在的列名产生冲突。同时,由于用户输入的值可能不是数字,需要进行类型转换或验证,以确保查询语句的正确性。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^