亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#處理MySql多個返回集的方法

 更新時間:2014年12月04日 09:29:52   投稿:shichen2014  
這篇文章主要介紹了C#處理MySql多個返回集的方法,實現(xiàn)了對處理MySql多個返回集進(jìn)行封裝,是非常實用的技巧,需要的朋友可以參考下

本文實例講述了C#處理MySql多個返回集的方法。分享給大家供大家參考。具體方法如下:

關(guān)于Mysql返回多個集java和Php的較多,但是C#的完整代碼好像沒見過,研究了一下做個封裝以后用

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

Sql語句如下

復(fù)制代碼 代碼如下:
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類

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

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

復(fù)制代碼 代碼如下:
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader);

如果想添加取消操作的可以用
復(fù)制代碼 代碼如下:
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader, CancellationToken cancellationToken)

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

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

復(fù)制代碼 代碼如下:
/// <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無構(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完成填充,不知道是否合適

復(fù)制代碼 代碼如下:
mysqldata.FillAsync(dt, mysqlreser).Wait(_cts);//等待線程完成

補(bǔ)充一下

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

sqlparameters是我聲明的一個結(jié)構(gòu)體,用來保存mysql的存儲過程的輸入?yún)?shù)

復(fù)制代碼 代碼如下:
public struct sqlparameters
{
        public string name;//存儲過程的輸入字符名稱
        public object pvalue;//存儲過程的輸入變量
        public sqlparameters(string names, object pvalues)
        {
            name = names;
            pvalue = pvalues;
        }
}

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

最新評論