国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

C#處理MySql多個返回集

2019-11-17 01:54:08
字體:
來源:轉載
供稿:網友

C#處理MySQL多個返回集

關于Mysql返回多個集javaphp的較多,但是C#的完整代碼好像沒見過,研究了一下做個封裝以后用

做一個Mysql的簡單分頁查詢,有兩個返回集

Sql語句如下

SELECT COUNT(*) from  poster;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類

image

現(xiàn)在多了很多FillAsync的方法,用的Task異步寫入。關于Task的實例可以參看這篇博客,各種例子是很好的

可以看到里面有我們需要的方法哈,那就是

public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader);

如果想添加取消操作的可以用

public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader, CancellationToken cancellationToken)

MySqlDataReader是有一個NextResult的方法可以用來循環(huán)讀取返回集,并返回bool類型

思路就出來了,通過判斷NextResult的結果是否為false,來結束返回集的查詢,通過MySqlDataAdapter類的FillAsync的方法對每個結果進行填充

        /// <summary>        /// 讀取多個返回集,返回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無構造函數(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();//取下一個結果集              //  Trace.WriteLine(dt.Rows.Count);                    }            conn.Close();            return dts;        }
這里我用的阻塞主線程等待dt完成填充,不知道是否合適
mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待線程完成

補充一下

conn是連接數(shù)據(jù)庫用的連接實例MySqlConnection

sqlparameters是我聲明的一個結構體,用來保存mysql的存儲過程的輸入參數(shù)

public struct sqlparameters    {        public string name;//存儲過程的輸入字符名稱        public object pvalue;//存儲過程的輸入變量        public sqlparameters(string names, object pvalues)        {            name = names;            pvalue = pvalues;        }    }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 浮山县| 高清| 汉中市| 徐水县| 梨树县| 铁岭县| 库车县| 清丰县| 沙雅县| 武平县| 南雄市| 武定县| 策勒县| 陇南市| 广饶县| 嘉禾县| 新宁县| 新宁县| 安达市| 东乌珠穆沁旗| 公主岭市| 苏尼特右旗| 营口市| 尼勒克县| 上林县| 闽清县| 吉木萨尔县| 贺州市| 兴化市| 米林县| 东乡县| 慈利县| 达州市| 南皮县| 尤溪县| 分宜县| 溧水县| 修文县| 河南省| 长白| 龙海市|