如何从SqlDataReader中获取DataRow

 我来答
greystar_cn
2017-03-29 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
1、前言
使用SqlDataReader较之SqlDataAdapter速度上快,因为读取记录是一行一行的来,但是往往也感觉那么蹩脚。例如经常用到的如何从SqlDataReader中获取DataRow呢?下面给出以下几种方法。
2、DataSet.Load方法
首先使用DataSet.Load(pSqlDataReader, LoadOption.Upsert, "")将数据载入。再使用pDataSet.Tables[0].Rows[0]取出说要的DataRow值,如下:
private DataRow GetDataRow(SqlDataReader pSqlDataReader)
{
DataRow pDataRow = null;
DataSet pDataSet = new DataSet();
DataTable pDataTable = m_DataRow.Table.Clone();
pDataSet.Load(pSqlDataReader, LoadOption.Upsert, pDataTable.TableName);
if (pDataSet.Tables[0].Rows.Count != 0)
{
pDataRow = pDataSet.Tables[0].Rows[0];
}
return pDataRow;
}
该方法经常会出现数值转换错误:如nvarchar 值 '123456789011' 的转换溢出了 int 列。超出了最大整数值。需要用户自己做排错处理。
3、DataTable.Load方法
方法的原理同上,先使用pDataTable.Load(pSqlDataReader, LoadOption.Upsert, null)将数据装入DataTable,然后使用pDataTable.Rows[0]获取DataRow的值。代码如下:
private DataRow GetDataRow(SqlDataReader pSqlDataReader)
{
DataRow pDataRow = null;
DataSet pDataSet = new DataSet();
DataTable pDataTable = m_DataRow.Table.Clone();
pDataTable.Rows.Clear();
pDataTable.Load(pSqlDataReader, LoadOption.Upsert, null);
if (pDataTable.Rows.Count != 0)
{
pDataRow = pDataTable.Rows[0];
}
return pDataRow;
}
同样如果数据不符合则出现上面的错误。
4、SqlDataReader.GetValue和DataTable.LoadDataRow方法
首先使用pSqlDataReader.GetValues(Values)将数据输出到数组Values中,然后通过pDataTable.LoadDataRow(Values, false)将数据装入DataTable,最后使用pDataRow = pDataTable.Rows[0]取出需要的值。代码如下:
private DataRow GetDataRow(SqlDataReader pSqlDataReader)
{
DataRow pDataRow = null;
DataSet pDataSet = new DataSet();
DataTable pDataTable = m_DataRow.Table.Clone();
object[] Values = new object[pDataTable.Columns.Count];
pSqlDataReader.GetValues(Values);
pDataTable.LoadDataRow(Values, false);
if (pDataTable.Rows.Count != 0)
{
pDataRow = pDataTable.Rows[0];
}
return pDataRow;
}
5、SqlDataReader.GetValues和DataRow.ItemArray = Values方法
该方法使用上面的原理,首先使用pSqlDataReader.GetValues(Values)将数据输出到数组Values中,然后定义一个DataRow,使用DataRow.ItemArray = Values方法对DataRow进行赋值,代码如下:
private DataRow GetDataRow1(SqlDataReader pSqlDataReader)
{
DataSet pDataSet = new DataSet();
DataRow pDataRow = m_DataRow.Table.NewRow();
object[] Values = new object[m_DataRow.Table.Columns.Count];
pSqlDataReader.GetValues(Values);
pDataRow.ItemArray = Values;
return pDataRow;
}
注意由于新定义的DataRow没有字段信息,需要对DataRow的列字段进行定义,定义一个空的符合数据要求的DataRow,使用DataTable.NewRow();,然后就可以使用该方法pDataRow.ItemArray = Values进行赋值。该方法效率高。
6、总结
本文建议使用最后一种方法,效率高且转换安全。
古老的情歌
2018-11-07 · TA获得超过2132个赞
知道小有建树答主
回答量:1064
采纳率:0%
帮助的人:196万
展开全部
为什么不用SQLGetData呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式