日期:2014-05-17  浏览次数:20443 次

如何在C#里根据参数数量写sql以及列?在线等!!!!
大家好!
问题是这样的:
我的数据表,Table。它有5个列,分别叫A,B,C,D,E
我有这样一个asp.net的画面,有5个label和5个textbox和5个复选框
分别名字叫lblCS01,lblCS02,lblCS03,lblCS04,lblCS05和txbCSZ01,txbCSZ02,txbCSZ03,txbCSZ04,txbCSZ05
和ckCS01,ckCS02,ckCS03,ckCS04,ckCS05

这5个testbox是让用户输入者5列的值得。

现在小弟不知道如何实现以下2大功能:
1,如果textbox不为NULL,就例如这个textbox对应的列是哪个(ABCDE里哪个值),并在程序sql里如何累加?

2,如果某复选框大钩了,就在sql里字段显示出来


2个问题的说明:
正常的sql是: Select A,B,C,D,E from Table where A='' and B='' and C='' And D='' and E=''

现在我也不知道用户可能在5个列里哪几个列输入查询的条件,也不知道用户要显示5列哪几列!

我目前的方法:
1.用sql语句读取某表的所有列名
SQL:
SQL code
select Name from syscolumns where id = OBJECT_ID('Table')

然后把获取的获取的值放入到string[]数组里,和label,textbox绑定
然后我就不知道如何把变量写成我需要的sql,主要困惑的地方是:
C# code

string sqlcmd=@"select * from table";
if(txt参数1 != NUll)
     {
           sqlcmd +=string.format("where {0}='{1}'",lbl参数1,txt参数1);
     }
if(txt参数2 != NUll)
     {
           sqlcmd +=string.format("where {0}='{1}'",lbl参数2,txt参数2);
     }




如果用户只有参数1写了条件,这样sql是对的,但是如果用户也写了参数2,那么我的sql就错了
就变成 select * from table where a='1' where b='2'

实例:

假如用户在A参数填写了hello,在C参数填写了 world,并且在ABCD列打钩
那么sql语句应该是select A,B,C,D from table where a='hello' and b='world'

希望大家能帮帮忙了!!!多多指教了!!!CSDN的大佬们多多关注啊!!!

------解决方案--------------------
有无数种方法可以来解决:


1. 通过判断textbox.Name来进行判断字段列名
2. 通过自定义的Attribute直接取字段名称(在TextBox中自定义一个Attribute,赋值为列名)
3. 通过前段javascript自动拼好条件,在后台直接取拼好的where语句
。。。。。。。。。。


CheckBox也是一样,通过名称、Attribute等方法也可以,稍稍试验两下就出来结果了



string sqlcmd=@"select * from table";
if(txt参数1 != NUll)
{
sqlcmd +=string.format("where {0}='{1}'",lbl参数1,txt参数1);
}
if(txt参数2 != NUll)
{
sqlcmd +=string.format("where {0}='{1}'",lbl参数2,txt参数2);
}


像这种情况首先你需要判断到底是And条件还是Or条件,假定全部是And条件,那么你首先设置条件为1=1即:
string sqlcmd=@"select * from table";
string strWhereCondition = "1=1";
if(!string.IsNullOrEmpty(txt参数1))
{
sqlcmd +=string.format(" And {0}='{1}'",lbl参数1,txt参数1);
}
if(!string.IsNullOrEmpty(txt参数1))
{
sqlcmd +=string.format(" And {0}='{1}'",lbl参数2,txt参数2);
}

这样最终得到的结果就是select * from table where 1=1 And a='1' And b='2'




刚入门需要多动脑想想哪里拼接错了,谁都有这么一个刚开始的过程,祝你成功!
------解决方案--------------------
探讨

还有个问题,我如何更具参数的个数已经如果是日期参数,需要2个输入框来表示起始日期,如何通过参数个数已经是否是日期参数,在页面上显示或隐藏多个控件,并赋值?

------解决方案--------------------
string sqlcmd=@"select * from table where 1=1 ";
if(txt参数1 != NUll)
{
sqlcmd +=string.format("and {0}='{1}'",lbl参数1,txt参数1);
}
if(txt参数2 != NUll)
{
sqlcmd +=string.format("and {0}='{1}'",lbl参数2,txt参数2);
}
if(txt日期参数3 != NUll)
{
sqlcmd +=string.format("and {0}>='{1}'",lbl参数3,txt参数3);
}
if(txt日期参数4 != NUll)
{
sqlcmd +=string.format("and {0}<='{1}'",lbl参数4,txt日期参数4);
}