如何把多次从数据库中查询出来的结果放在同一个datagridview中,帮忙写下下面的代码

根据EXCEL表格的内容,查询数据库,将结果放在同一个DATAGRIDview中,不知道怎么放,帮忙写下下面的代码

for (int n = 0; n <= sheet.Rows.Count; n++)
{
string SQL = "select distinct QPN,APN from " + Welcome.MODEL + " where QPN ='"+sheet.Cells[n+1,1]+"'";
ada.SelectCommand = new OleDbCommand(SQL, con);
}
有没有简单一点的啊,太难了,没看懂,错了也不知道怎么调试

将 sheet.Cells[n+1,1] 组合成字符串 allCells,然后改查询语句不是更好吗?
string SQL =string.Format("select distinct QPN,APN from {0} where QPN in {1} ",Welcome.MODEL,allCells);

allCell 格式应为 “('A','B','C')” ,也就是把所有的sheet.Cells组合成 “('A','B','C')” 这样格式的字符串,如此一来一次查询就搞定了。追问

不存在allcell,怎么个组合法。

追答

定义一个allCells变量不就有了

string allCells = string.Empty;
然后再循环里面 组合 allCells 成为“('A','B','C')” 这样格式的字符串就行了
最后组合成的查询字符串应该是像这样的
select distinct QPN,APN from yourTable where QPN in ('A','B','C')

追问

我明白你的意思,那现在我把EXCEL表格变成行形式, ,这个变量是你自己定义的,你这样查询他怎么获取条件。找不到表啊

追答

你压根就没明白我再说什么,归根结底也就是查询字符串的拼接而已。既然你懂"select distinct QPN,APN from " + Welcome.MODEL + " where QPN ='"+sheet.Cells[n+1,1]+"'";
这么拼接了,其他的拼接也是转换一下思路而已

追问

就是不懂嘛?就是不懂如何在in后面获取SHEET表的值。不知道代码,也不知道怎么写,给个范例也好啊

追答

StringBuilder allCells= new StringBuilder();
for (int n = 0; n <= sheet.Rows.Count; n++)
{
allCells= string.Format("'{0}'",sheet.Cells[n+1,1]);
allCells.Append(n != count - 1 ? allCells+ "," : allCells);
}
string SQL =string.Format("select distinct QPN,APN from {0} where QPN in ({1}) ",Welcome.MODEL,allCells.ToString());

最后执行SQL应该懂了吧

追问

最后一个问题,allcells.append ?后面的语法错误,前面的COUNT我已经改成sheet.row.count

追答

StringBuilder allCells= new StringBuilder();
int count = sheet.Rows.Count;
string cell= string.Empty;
for (int i = 0; i < count; i++)
{
cell= string.Format("'{0}'",sheet.Cells[n+1,1]);
allCells.Append(i != count - 1 ? cell+ "," : cell);
}

追问

太难,不懂,还是没搞出来,DATAGRIDVIEW没反应,先谢谢啦

追答

Holy Shift! 把excel 表传上来吧,直接给你个现成的吧,数据库表格式也提供一下

追问

数据库

根据根据表内容查询数据库,并把结果APN,QPN显示在datagridview中,表的内容是QPN,另外我发现获取的excel.row.count居然是全部的ROW,有一万多

追答

XXX,竟然上的是图片,把你整个工程压缩发我邮箱吧 M978718484@163.com,可以帮你你改改。

追问

发给你了收到没?

追答

收到,晚上再发给你吧

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-10

可以将多个表结果放到同一个DataTable,DataView,或List<T>内,再将其作为数据源绑定,前提是多个结果集有着一样的数据列。


例:

    class Item
    {
        public int ID {get;set}
        public string Name {get;set}
    }

List<Item> list = new List<Item>();
for(DataRow dr in sheet1.Rows)
{
    list.Add(new Item{ID=Convert.ToInt32(dr[0]),Name=dr[1].ToString()});
}
for(DataRow dr in sheet2.Rows)
{
    list.Add(new Item{ID=Convert.ToInt32(dr[0]),Name=dr[1].ToString()});
}
GridView1.DataSource=list;
GridView1.DataBind();

追问

什么语言啊,看得不太懂。能解释一下吗?
datarow in sheet row是什么意思,
list的item含有2个参数,一个是ID(数据库的编号),一个是NAME。
实在是没看懂你的FOR语句要干什么吗。

追答

我是假设你的sheet是DataTable
DataTable,Rows行集合里就是数据行,DataRow,作一个遍历
Item类的两个属性我是假设的,你根据你自己的需求去定义
如果你的sheet不是DataTable,那你就按你自己合适的数据结构去循环遍历就行了

追问

sheet[N+1,1]每变化一次,就有一个结果,这个结果存在datatable里吧,每次查询会不会产生datatable[N],还是一直都是覆盖前面的结果只有一个datatable[0].每次的结果如何填充到LIST里,真的没看明白啊

追答

你用DataReader只读结果集,不会缓存

你首先明白我写的Item类是为了描述一条记录的,不管是DataTable的行,还是DataReader遍历是为了将每一行实例化为Item再添加一个统一的列表内,方便绑定

...
using(SqlDataReader dr = cmd.ExecuteReader())    //将数据读取到结果集
{
    while(dr.Reader())       //循环遍历,当前行
    {
        //new Item{...}这种写法是C#初始化对象的一种方式
        list.Add(
            new Item{
                ID=dr.GetInt32(0),        //将第一列作为int取值赋给ID
                Name=dr.GetString(1)      //第第二列作为String赋给Name
                }}
    }
}

...
GridView1.DataSource=list;

追问

你的代码是怎么插入的啊?挺好看的

本回答被网友采纳
第2个回答  2014-06-10
把查询出的数据先加到临时表中。。所有数据查询完之后。。在把临时表的数据填充进DataGridview中追问

怎么添加到临时表,代码怎么写

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网