本文实例讲述了C#处理MySql多个返回集的方法。分享给大家供大家参考。具体方法如下:
关于Mysql返回多个集java和Php的较多,但是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;
查看MySqlDataAdapter类
现在多了很多FillAsync的方法,用的Task异步写入。关于Task的实例可以参看这篇博客,各种例子是很好的
可以看到里面有我们需要的方法哈,那就是
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader);
public Task<int> FillAsync(DataTable dataTable, IDataReader dataReader, CancellationToken cancellationToken)
思路就出来了,通过判断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无构造函数 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是连接数据库用的连接实例MySqlConnection
sqlparameters是我声明的一个结构体,用来保存mysql的存储过程的输入参数
public struct sqlparameters { public string name;//存储过程的输入字符名称 public object pvalue;//存储过程的输入变量 public sqlparameters(string names, object pvalues) { name = names; pvalue = pvalues; } }
希望本文所述对大家的C#程序设计有所帮助。
本文向大家介绍ThinkPHP处理Ajax返回的方法,包括了ThinkPHP处理Ajax返回的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ThinkPHP处理Ajax返回的方法,分享给大家供大家参考。具体实现方法如下: 在ThinkPHP中可以直接使用ajax返回: 而在处理过程中可以使用这个函数处理: 希望本文所述对大家的ThinkPHP框架程序设计有所帮助。
本文向大家介绍C#多线程处理多个队列数据的方法,包括了C#多线程处理多个队列数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#多线程处理多个队列数据的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
我正在编写一个spring批处理作业,在其中一个步骤中,我为处理器编写了以下代码: null 欢迎任何暗示。
问题内容: 我有python背景,目前正在迁移到node.js。由于其异步特性,我无法适应node.js。 例如,我试图从MySQL函数返回一个值。 经过一番阅读后,我意识到上面的代码无法正常工作,由于node.js的异步特性,我需要返回一个promise。我无法编写像python这样的node.js代码。如何转换为返回承诺,以及如何处理返回的值? 实际上,我想做的就是这样。 如何以可读的方式在n
1.API 返回结构 返回结果(response)分为:状态码(status code)、头部(headers)、消息体(body)。其中算法的结果会以 JSON 格式放在消息体中。 如何从 HTTP 返回中分别获取这三部分信息,请参见所用 HTTP 库的文档。 解析 JSON 格式需要寻找所用语言的 JSON 库,参见 http://www.json.org/ 2.正常结果 状态码为 2xx的为
问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用