You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于两个变量从SQL表查询数据的正确代码实现咨询

基于两个变量从SQL表查询数据的正确代码实现咨询

嗨,我看到你已经搞定单变量查询SQL数据的代码了,现在想扩展成两个变量的查询对吧?先给你指出现有代码里的问题,再给你安全又正确的实现方式~

首先,你写的第二个查询语句有两个明显问题:

  • SQL里的逻辑与运算符是AND,不是你用的&&,这会导致语法错误
  • 第二个条件里你只写了'%' + CBRtype.Text + '%',但没指定对应的列名(比如类似RopeDiameter那样的列),数据库根本不知道要匹配哪一列

更重要的是,直接把用户输入的文本拼接进SQL语句里会引发严重的SQL注入漏洞,这是绝对不能在生产环境中使用的写法,恶意用户可以通过输入特殊字符篡改你的SQL逻辑,甚至删除整个数据库。

下面是正确的参数化查询实现,既解决语法问题,又彻底避免SQL注入风险:

// 假设你的第二个变量对应的数据库列名为RopeType,请替换成你实际的列名
conn.Open();
SqlCommand comd = new SqlCommand("select * from RopeInfo where RopeDiameter like @Diameter AND RopeType like @Type", conn);

// 添加参数,把通配符%和用户输入结合后作为参数值传入
comd.Parameters.AddWithValue("@Diameter", "%" + TBRdia.Text + "%");
comd.Parameters.AddWithValue("@Type", "%" + CBRtype.Text + "%");

SqlDataReader read = comd.ExecuteReader();
while (read.Read())
{
    TBRWeight.Text = read[3].ToString();
}

// 记得手动关闭读取器和连接,或者用下面的using写法更省心
read.Close();
conn.Close();

另外,更推荐用using语句来管理数据库资源,它会自动帮你释放连接、命令和读取器,即使代码抛出异常也不会导致资源泄漏:

// 替换成你的数据库连接字符串
using (SqlConnection conn = new SqlConnection("YourConnectionString"))
{
    conn.Open();
    using (SqlCommand comd = new SqlCommand("select * from RopeInfo where RopeDiameter like @Diameter AND RopeType like @Type", conn))
    {
        comd.Parameters.AddWithValue("@Diameter", "%" + TBRdia.Text + "%");
        comd.Parameters.AddWithValue("@Type", "%" + CBRtype.Text + "%");
        
        using (SqlDataReader read = comd.ExecuteReader())
        {
            while (read.Read())
            {
                TBRWeight.Text = read[3].ToString();
            }
        }
    }
}

最后提醒下:一定要把代码里的RopeType替换成你数据库表中对应CBRtype.Text的实际列名,确保列名和数据库里的一致哦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:28:09