日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多表查询返回多个DataTable,合并到一个Table中.

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多表查询返回多个DataTable,合并到一个Table中. 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 本文意在說明一下DataSet.Merge(Table)和多個Table合并到一個里面的操作.因為是新手,代碼肯定有很多問題,歡迎大家批評指正.??? 如果你有更好的解決方案,請告訴我.謝謝.

先說一下需求:ASP.NET+MYSQL

???

??? 查詢連續N天的郵件發送日志.在庫里,表是按天存放的,表名也是按天命名的.例如:mailsend20090302,mailstatus20090302,兩張表有ID關聯.為了調試簡單,我把日期直接寫死.在點查詢按鈕之后,首先根據得到的日期拼湊表名,得到兩個表名數組,然后調用MySqlHelper類里的方法,下面是數據庫操作的代碼.因為用的是MySql,所以需要添加一個MySql.Data.dll引用.另外前兩天看過string 與stringbuilder之間的區別,所以拼sql 時用了stringbuilder,然后用其ToString()賦給數組.

對數據做點說明:

mstatus:all,success,failure

mtype:jobs,email

pageindex,pagesize為分頁控件的屬性,分別表示第N頁,和每頁顯示多少數據.

拼表名的方法:

?

Code
?1?//數據庫表名
?2????????string[]?sendTables;
?3????????string[]?statusTables;
?4
?5????????//拼表名
?6????????void?GetTableName()
?7????????{
?8????????????string?dateFrom?=?"2009-01-07";
?9????????????string?dateTo?=?"2009-01-10";
10????????????TimeSpan?ts?=?Convert.ToDateTime(dateTo)?-?Convert.ToDateTime(dateFrom);
11????????????int?counter?=?ts.Days?+?1;
12????????????sendTables?=?new?string[counter];
13????????????statusTables?=?new?string[counter];
14???????????
15????????????for?(int?i?=?0;?i?<?counter;?i++)
16????????????{
17????????????????sendTables[i]?=?"mailsend"?+?Convert.ToDateTime(dateFrom).AddDays(i).ToString("yyyyMMdd");
18????????????????statusTables[i]?=?"mailstatus"?+?Convert.ToDateTime(dateFrom).AddDays(i).ToString("yyyyMMdd");
19????????????}

20????????????
21????????}

22

?

Code
??1using?System;
??2using?System.Data;
??3using?System.Configuration;
??4using?System.Web;
??5using?System.Web.Security;
??6using?System.Web.UI;
??7using?System.Web.UI.WebControls;
??8using?System.Web.UI.WebControls.WebParts;
??9using?System.Web.UI.HtmlControls;
?10using?MySql.Data.MySqlClient;
?11using?System.Text;
?12
?13namespace?MultiTable
?14{
?15????public?class?MySqlHelper
?16????{
?17????????private?static?string?strConn?=?ConfigurationManager.AppSettings["connStr"].ToString();
?18????????//多天查?詢?sendTables,statusTables,muser,mdomain,mstatus,pageindex,pagesize?
?19????????private?static?string[]?PrepareSelectString2(string[]?sendTables,?string[]?statusTables,?string?muser,?string?mdomain,?string?mstatus,?string?mtype,?int?pageindex,?int?pagesize)
?20????????{
?21????????????string[]?strSelect?=?new?string[sendTables.Length];
?22????????????StringBuilder?sbCommand2?=?new?StringBuilder();
?23????????????for?(int?i?=?0;?i?<?sendTables.Length;?i++)
?24????????????{
?25????????????????StringBuilder?sbCommand?=?new?StringBuilder(@"select?d.rundate,d.runtime,s.status,s.failcode?from?"?+?sendTables[i]?+?"?as?d,"?+?statusTables[i]?+?"?as?s?"?+
?26????????????????????????????????????"where?d.id=s.id?and?d.maildomain="?+?"\""?+?mdomain?+?"\""?+?"?and?d.mailuser="?+?"\""?+?muser?+?"\"");
?27????????????????if?(mstatus?!=?"all")
?28????????????????{
?29????????????????????sbCommand.Append("?and?s.status="?+?"\""?+?mstatus?+?"\"");
?30????????????????}

?31????????????????if?(mtype?==?"jobs")
?32????????????????{
?33????????????????????sbCommand.Append("?and?(d.host!='quickmail6'?and?d.host!='quickmail7')");
?34????????????????}

?35????????????????else
?36????????????????{
?37????????????????????sbCommand.Append("?and?(d.host='quickmail6'?or?d.host='quickmail7')");
?38????????????????}

?39????????????????sbCommand.Append("order?by?d.runtime??asc");
?40????????????????strSelect[i]?=?sbCommand.ToString();
?41????????????}

?42????????????return?strSelect;
?43????????}

?44????????private?static?string[]?PrepareExportString2(string[]?sendTables,?string[]?statusTables,?string?muser,?string?mdomain,?string?mstatus,?string?mtype)
?45????????{
?46????????????string[]?strSelect?=?new?string[sendTables.Length];
?47????????????StringBuilder?sbCommand2?=?new?StringBuilder();
?48????????????for?(int?i?=?0;?i?<?sendTables.Length;?i++)
?49????????????{
?50????????????????StringBuilder?sbCommand?=?new?StringBuilder(@"select?cast(d.rundate?as?char(10))?as?rundate,d.runtime,s.status,s.failcode?from?"?+?sendTables[i]?+?"?as?d,"?+?statusTables[i]?+?"?as?s?"?+
?51????????????????????????????????????"where?d.id=s.id?and?d.maildomain="?+?"\""?+?mdomain?+?"\""?+?"?and?d.mailuser="?+?"\""?+?muser?+?"\"");
?52????????????????if?(mstatus?!=?"all")
?53????????????????{
?54????????????????????sbCommand.Append("?and?s.status="?+?"\""?+?mstatus?+?"\"");
?55????????????????}

?56????????????????if?(mtype?==?"jobs")
?57????????????????{
?58????????????????????sbCommand.Append("?and?(d.host!='quickmail6'?and?d.host!='quickmail7')");
?59????????????????}

?60????????????????else
?61????????????????{
?62????????????????????sbCommand.Append("?and?(d.host='quickmail6'?or?d.host='quickmail7')");
?63????????????????}

?64????????????????sbCommand.Append("?order?by?d.rundate,d.runtime?asc?");
?65????????????????strSelect[i]?=?sbCommand.ToString();
?66????????????}
?????????
?67????????????return?strSelect;
?68????????}

?69????????//多天
?70????????//統計數量?
?71????????private?static?string[]?PrepareCountString2(string[]?sendTables,?string[]?statusTables,?string?muser,?string?mdomain,?string?mstatus,?string?type)
?72????????{
?73????????????string[]?strCount?=?new?string[sendTables.Length];
?74????????????for?(int?i?=?0;?i?<?sendTables.Length;?i++)
?75????????????{
?76????????????????StringBuilder?sbCommand?=?new?StringBuilder(@"select?count(d.id)?from?"?+?sendTables[i]?+?"?as?d,"?+?statusTables[i]?+?"?as?s?where?d.id=s.id?and?d.maildomain="?+?"\""?+?mdomain?+?"\""?+?"?and?d.mailuser="?+?"\""?+?muser?+?"\"");
?77????????????????if?(mstatus?!=?"all")
?78????????????????{
?79????????????????????sbCommand.Append("?and?s.status="?+?"\""?+?mstatus?+?"\"");
?80????????????????}

?81????????????????if?(type?==?"jobs")
?82????????????????{
?83????????????????????sbCommand.Append("?and?(d.host!='quickmail6'?and?d.host!='quickmail7')");
?84????????????????}

?85????????????????else
?86????????????????{
?87????????????????????sbCommand.Append("?and?(d.host='quickmail6'?or?d.host='quickmail7')");
?88????????????????}

?89????????????????strCount[i]?=?sbCommand.ToString();
?90????????????}

?91????????????return?strCount;
?92????????}

?93????????//多天數量統計string[]?PrepareCountString(string[]?sendTable,?string[]?statusTables,?string?muser,?string?mdomain,?string?mstatus,?string?type)
?94
?95????????public?static?int?GetCount2(string[]?sendTables,?string[]?statusTables,?string?user,?string?domain,?string?status,?string?type)
?96????????{
?97????????????MySqlConnection?MyConn?=?new?MySqlConnection(strConn);
?98????????????try
?99????????????{
100????????????????OpenConnection(MyConn);
101????????????????MySqlCommand?MyCommand?=?new?MySqlCommand();
102????????????????MyCommand.Connection?=?MyConn;
103????????????????MyCommand.CommandType?=?CommandType.Text;
104????????????????string[]?strCount?=?PrepareCountString2(sendTables,?statusTables,?user,?domain,?status,?type);
105????????????????int?count?=?0;
106????????????????//將每個表里數據的數量加起來得到總數.
107????????????????for?(int?i?=?0;?i?<?strCount.Length;?i++)
108????????????????{
109????????????????????MyCommand.CommandText?=?strCount[i];
110????????????????????count?+=?Convert.ToInt32(MyCommand.ExecuteScalar().ToString());
111????????????????}

112????????????????return?count;
113????????????????CloseConnection(MyConn);
114????????????}

115????????????catch?(Exception)
116????????????{
117????????????????return?0;
118????????????}

119????????}

120????????//多天導出數據.
121????????public?static?DataTable?ExportData2(string[]?sendTables,?string[]?statusTables,?string?user,?string?domain,?string?status,?string?type)
122????????{
123????????????DataSet?MyDS?=?new?DataSet();
124????????????DataTable?MyTable;
125????????????try
126????????????{
127????????????????MySqlConnection?MyConn?=?new?MySqlConnection(strConn);
128????????????????OpenConnection(MyConn);
129????????????????MySqlCommand?MyCommand?=?new?MySqlCommand();
130????????????????MyCommand.Connection?=?MyConn;
131????????????????MyCommand.CommandType?=?CommandType.Text;
132????????????????MyCommand.CommandTimeout?=?180;
133????????????????MySqlDataAdapter?MyAdapter?=?new?MySqlDataAdapter();
134????????????????string[]?strCommand?=?PrepareExportString2(sendTables,?statusTables,?user,?domain,?status,?type);
135????????????????string[]?tableName?=?new?string[sendTables.Length];
136
137????????????????//按日期取出數據,分別存放到DataSet的表中.
138????????????????for?(int?i?=?0;?i?<?strCommand.Length;?i++)
139????????????????{
140????????????????????MyCommand.CommandText?=?strCommand[i];
141????????????????????MyAdapter.SelectCommand?=?MyCommand;
142????????????????????tableName[i]?=?"Log"?+?i.ToString();
143????????????????????MyAdapter.Fill(MyDS,?tableName[i]);
144????????????????????MyDS.Merge(MyDS.Tables[i]);
145????????????????}
???????????????
146????????????????//復制表結構.
147????????????????MyTable?=?new?DataTable();
148????????????????MyTable?=?MyDS.Tables[0].Clone();
149????????????????
150????????????????//將DataSet中多個表的數據合并到一個新表里.
151????????????????for?(int?count?=?0;?count?<?MyDS.Tables.Count?;?count++)
152????????????????{
153????????????????????for?(int?i?=?0;?i?<?MyDS.Tables[count].Rows.Count;?i++)
154????????????????????{
155????????????????????????DataRow?dr?=?MyTable.NewRow();
156????????????????????????for?(int?j?=?0;?j?<?MyDS.Tables[count].Columns.Count;?j++)
157????????????????????????{
158????????????????????????????dr[j]?=?MyDS.Tables[count].Rows[i][j];
159????????????????????????}

160????????????????????????MyTable.Rows.Add(dr);????????????????????????
161????????????????????}
????????????????????
162????????????????}

163????????????????CloseConnection(MyConn);
164????????????????return?MyTable;
165????????????}

166????????????catch?(Exception)
167????????????{
168????????????????return?new?DataTable();
169????????????}

170????????}

171????????//多天查詢數據.
172????????public?static?DataTable?GetData2(string[]?sendTables,?string[]?statusTables,?string?user,?string?domain,?string?status,?string?type,?int?pageindex,?int?pagesize)
173????????{
174????????????DataTable?MyTable?;
175????????????DataTable?MyTable2?=?new?DataTable();
176????????????try
177????????????{
178????????????????//取出所有數據到一張表里.
179????????????????MyTable?=?new?DataTable();
180????????????????MyTable?=?ExportData2(sendTables,?statusTables,?user,?domain,?status,?type);
181
182????????????????//拿出(pageindex-1)*pagesize--pageindex*pagesize的數據.
183????????????????MyTable2=?MyTable.Clone();
184????????????????for?(int?i?=?0;?i?<?pagesize;?i++)
185????????????????{
186????????????????????int?index?=?i?+?pagesize?*?(pageindex?-?1);
187????????????????????DataRow?dr?=?MyTable2.NewRow();
188????????????????????//MyDS.Tables[0].NewRow();
189????????????????????for?(int?j?=?0;?j?<?MyTable.Columns.Count;?j++)
190????????????????????{
191????????????????????????dr[j]?=?MyTable.Rows[index][j];
192????????????????????}

193????????????????????MyTable2.Rows.Add(dr);
194?????????????????}

195????????????????return?MyTable2;
196????????????}

197????????????catch?(Exception)
198????????????{
199????????????????return?new?DataTable();
200????????????}

201????????}

202????????private?static?void?CloseConnection(MySqlConnection?MyConn)
203????????{
204????????????if?(MyConn.State?==?ConnectionState.Open)
205????????????????MyConn.Close();
206????????}

207????????private?static?void?OpenConnection(MySqlConnection?MyConn)
208????????{
209????????????if?(MyConn.State?==?ConnectionState.Closed)
210????????????????MyConn.Open();
211????????}

212????}

213
214}

215

?

?

轉載于:https://www.cnblogs.com/zhangkun-w/archive/2009/03/11/1408697.html

總結

以上是生活随笔為你收集整理的多表查询返回多个DataTable,合并到一个Table中.的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。