基于两个变量从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
相关产品推荐
相关产品推荐

