一个简单的SQL查询语句,

太阳丛 2009-07-03 12:23:56
在WINFORM窗体中,有这么几个控件:checkbox1, checkbox2,checkbox3 textbox1,textbox2,textbox3,
button1, datagridview1 表名是 student 有三个字段 ID name telephone
当点击button1时,根据textbox中的输入进行查询
在button1中的代码如下(直接打的,没有在VC里写):
string aa="",bb="",cc="";
if (checkbox1.checked==true)
{ aa= textbox1.text;}
else
{ aa="ID";}
if (checkbox2.checked==true)
{ bb= textbox2.text;}
else
{ bb="name";}
if (checkbox3.checked==true)
{ cc= textbox3.text;}
else
{ cc="telephone";}
string strsel="select * from student where ID="+aa+" and name="+bb+" and telephone="+cc+"";

datafridview1.datasource=connection.dset(strsel).table[0];


说明下,“connection”是我写的一个方法类,贴出来吧:
class connection
{

public static DataSet dtset(string str)
{ string strsqlcn = "Initial Catalog=school;Data Source=(local);Integrated Security=SSPI;";
SqlConnection cn = new SqlConnection(strsqlcn);
SqlDataAdapter adp = new SqlDataAdapter(str, cn);
DataSet dset = new DataSet();
adp.Fill(dset);
return dset;
}
}

个人认为问题的关键在SQL 语句,当checkbox都为FALSE 或第一个为true时,是没有问题,如果第一个checked为false ,就有问题了
还请高人指点下
另外说明下,此处主要用在对表的多条件混合查询中,用户可以自由选择查询条件,本来是要用IF {if {if{}else} else}ELSE
这种方式嵌套的,但是感觉不太好,所有就想了这么一段代码来实现目的
...全文
23 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
太阳丛 2009-07-03
  • 打赏
  • 举报
回复
忘记说了,
这里不可以再做判断是获取的TEXT的值 还是直接赋予的值,
否则就进入了IF ELSE 嵌套了
太阳丛 2009-07-03
  • 打赏
  • 举报
回复

但是要考虑一个问题,如果CHECKBOX.CHECKED==FALSE 那么aa= ID ,加了单引号,那就查询不到数据了

在程序运行中 string strsel="select * from student where ID="+aa+"";
这个样子也是可以执行的 不管CHECKBOX.CHECKED==FALSE 还是TRUE 程序都是可以执行的
koukoujiayi 2009-07-03
  • 打赏
  • 举报
回复
是字符串的话加单引号!!
string strsel="select * from student where ID='"+aa+"' and name='"+bb+"' and telephone='"+cc+"'";
sjj603 2009-07-03
  • 打赏
  • 举报
回复
看你数据库的设计了 看允不允许为空。你这样写如果一个为FALSE 你定位到SQL语句生成那里,你就知道你语句哪里错了
要不就写个SQL生成语句,这个比较麻烦。要不你就多写几个判断根据判断TEXT为空重新写SQL语句。
太阳丛 2009-07-03
  • 打赏
  • 举报
回复

哈哈~~~~~ 管用
接分,
又是你解决了我的问题
qldsrx 2009-07-03
  • 打赏
  • 举报
回复
string aa="",bb="",cc=""; 
if (checkbox1.checked==true)
{ aa= textbox1.text;}
else
{ aa="ID";}
if (checkbox2.checked==true)
{ bb= "'"+textbox2.text+"'";}
else
{ bb="name";}
if (checkbox3.checked==true)
{ cc= "'"+textbox3.text+"'";}
else
{ cc="telephone";}
string strsel="select * from student where ID="+aa+" and name="+bb+" and telephone="+cc+"";

这样不就可以了?虽然用三目运算符加String.Format方法会更简洁些,不过你先这样凑合着用吧。
太阳丛 2009-07-03
  • 打赏
  • 举报
回复
回复下楼上所有提示用 单引号 的

if (checkbox1.checked==FALSE)
{ aa="ID";}
select 语句好像就变成 select * from student where ID='ID' 了
查询不到数据了

不过我还是再查询下‘’吧
SQL77 2009-07-03
  • 打赏
  • 举报
回复
string strsel="select * from student where ID='"+aa+"' and name='"+bb+"' and telephone='"+cc+"'"; 应该要用单引号定界
太阳丛 2009-07-03
  • 打赏
  • 举报
回复
即使我在代码里写
if (textbox1.text.length>0)
{aa= textbox1.text;}
else
{messagebox.show("内容不能为空","提示")}
也是一样的问题,
我进入SQL查询分析器看过了 select * from student where ID=ID and name=name and telephone='1234567'没有什么问题
但是在VC里无法执行
feifeiyaqi3 2009-07-03
  • 打赏
  • 举报
回复
string strsel="select * from student where ID='"+aa+"' and name='"+bb+"' and telephone='"+cc+"'";


------------------------

create procedure

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧