C#處理MySql多個返回集的方法
本文實例講述了C#處理MySql多個返回集的方法。分享給大家供大家參考。具體方法如下:
關(guān)于Mysql返回多個集java和Php的較多,但是C#的完整代碼好像沒見過,研究了一下做個封裝以后用
做一個Mysql的簡單分頁查詢,有兩個返回集
Sql語句如下
select
t.PosterID,
t.PostTime,
t.Title
from app_us_poster t ORDER BY t.PostTime desc LIMIT startPageNum,endPageNum;
這里MySql中返回是兩個集,如何通過C#獲取這兩個值呢,需要用到MySqlDataAdapter和MySqlDataReader這兩個類
查看MySqlDataAdapter類
現(xiàn)在多了很多FillAsync的方法,用的Task異步寫入。關(guān)于Task的實例可以參看這篇博客,各種例子是很好的
可以看到里面有我們需要的方法哈,那就是
如果想添加取消操作的可以用
MySqlDataReader是有一個NextResult的方法可以用來循環(huán)讀取返回集,并返回bool類型
思路就出來了,通過判斷NextResult的結(jié)果是否為false,來結(jié)束返回集的查詢,通過MySqlDataAdapter類的FillAsync的方法對每個結(jié)果進(jìn)行填充
/// 讀取多個返回集,返回List<DataTable>
/// </summary>
/// <param name="StoredName"></param>
/// <param name="Parameters"></param>
/// <returns></returns>
public List<DataTable> StroedGetTableList(string StoredName, List<sqlparameters> Parameters)
{
MySqlDataAdapter mysqldata = new MySqlDataAdapter();
MySqlCommand sqlCommand = new MySqlCommand();
sqlCommand.CommandText = StoredName;//存儲過程名稱
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Connection = conn;
for (int i = 0; i < Parameters.Count; i++)
{
sqlCommand.Parameters.AddWithValue(Parameters[i].name, Parameters[i].pvalue);
}
conn.Open();
List<DataTable> dts = new List<DataTable>();
MySqlDataReader mysqlreser = sqlCommand.ExecuteReader();//mysqlreader無構(gòu)造函數(shù)
bool re = true;
System.Threading.CancellationToken _cts;//用于Cancel用的
while (re)
{
DataTable dt = new DataTable();
mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待線程完成
dts.Add(dt);
re = mysqlreser.NextResult();//取下一個結(jié)果集
// Trace.WriteLine(dt.Rows.Count);
}
conn.Close();
return dts;
}
這里我用的阻塞主線程等待dt完成填充,不知道是否合適
補(bǔ)充一下
conn是連接數(shù)據(jù)庫用的連接實例MySqlConnection
sqlparameters是我聲明的一個結(jié)構(gòu)體,用來保存mysql的存儲過程的輸入?yún)?shù)
{
public string name;//存儲過程的輸入字符名稱
public object pvalue;//存儲過程的輸入變量
public sqlparameters(string names, object pvalues)
{
name = names;
pvalue = pvalues;
}
}
希望本文所述對大家的C#程序設(shè)計有所幫助。
- C#連接MySql數(shù)據(jù)庫的方法
- C#操作mysql數(shù)據(jù)庫的代碼實例
- C#連接操作 MySQL 數(shù)據(jù)庫實例(使用官方驅(qū)動)
- C#實現(xiàn)操作MySql數(shù)據(jù)層類MysqlHelper實例
- C# mysql 插入數(shù)據(jù),中文亂碼的解決方法
- C#連接mysql數(shù)據(jù)庫完整實例
- C#中調(diào)用MySQL存儲過程的方法
- C# Mysql 查詢 Rownum的解決方法
- C#連接mariadb(MYSQL分支)代碼示例分享
- C#中實現(xiàn)查找mysql的安裝路徑
- C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL
- C#連接mysql的方法【基于vs2010】
相關(guān)文章
unity中實現(xiàn)Edge瀏覽器鼠標(biāo)手勢的功能思路詳解
這篇文章主要介紹了unity中實現(xiàn)Edge瀏覽器鼠標(biāo)手勢的功能思路詳解,實現(xiàn)起來其實并不復(fù)雜,涉及的技術(shù)點(diǎn)有pc端和移動端屏幕拖動事件,二維向量的相關(guān)運(yùn)算,手勢匹配算法,事件系統(tǒng)設(shè)計模式,需要的朋友可以參考下2023-12-12winform模擬鼠標(biāo)按鍵的具體實現(xiàn)
這篇文章介紹了winform模擬鼠標(biāo)按鍵的具體實現(xiàn),有需要的朋友可以參考一下2013-10-10C#開發(fā)之Socket網(wǎng)絡(luò)編程TCP/IP層次模型、端口及報文等探討
我們在講解Socket編程前,先看幾個和Socket編程緊密相關(guān)的概念2013-03-03使用C#創(chuàng)建Windows服務(wù)的實例代碼
這篇文章主要介紹了使用C#創(chuàng)建Windows服務(wù)的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07