使用以SQLReader的从存储过程返回多个表 [英] Use SqlReader to get back multiple tables from a stored procedure

查看:249
本文介绍了使用以SQLReader的从存储过程返回多个表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个用户定义的类型,这是在SQLServer数据库的DataTable。我一直在使用数据库的DbCommand等,以调用存储过程并获得数据集回来。 。数据集是很方便的,因为它们可以包含多个表



现在我想通过在一个DataTable,所以我尝试:

 字符串_strComText =stored_procedure_name_changed_to_protect_the_innocent; 
_objCom = _objDB.GetSqlStringCommand(_strComText);
_objDB.AddInParameter(_objCom,@BASE_ITEMIDS,DbType.Object,dtItemIds);
_objCom.CommandType = CommandType.StoredProcedure;
=数据_objDB.ExecuteDataSet(_objCom);



不过,我得到一个异常的@BASE_ITEMIDS是不是正确的类型:
传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确的参数1(\@ BASE_ITEMIDS\):数据类型0X62(SQL_VARIANT)有一个无效的类型为特定类型的元数据



我已经看到了这个用做SQLReader的,但也可以SQLReader的使用取回多个表?如果我的第一个表是空的,我没有看到任何SQLReader的行。


解决方案

能SQLReader的用于取回多个表?




是的。你必须按顺序阅读每个表和调用表之间的 .NextResult()方法。

 使用(VAR RDR = MySqlCommand.ExecuteReader())
{

{
,而(rdr.Read())
$ { b $ b //做到与每个记录
的东西}
},而(rdr.NextResult());
}


I have a user defined type, which is a datatable in an SqlServer database. I have been using Database, DbCommand, etc to call stored procedures and get a Dataset back. Datasets are handy in that they can contain multiple tables.

Now I want to pass a Datatable in, so I tried:

string _strComText = "stored_procedure_name_changed_to_protect_the_innocent";
_objCom = _objDB.GetSqlStringCommand(_strComText);
_objDB.AddInParameter(_objCom, "@BASE_ITEMIDS", DbType.Object, dtItemIds);
_objCom.CommandType = CommandType.StoredProcedure;
dataset = _objDB.ExecuteDataSet(_objCom);

But I get an exception that "@BASE_ITEMIDS" is not the correct type: "The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 1 (\"@BASE_ITEMIDS\"): Data type 0x62 (sql_variant) has an invalid type for type-specific metadata."

I've seen this done with SqlReader, but can sqlReader be used to get back multiple tables? If my first table is empty, I don't see any rows in SqlReader.

解决方案

can sqlReader be used to get back multiple tables?

Yes. You have to read each table in sequence and call the .NextResult() method between tables.

using (var rdr = MySqlCommand.ExecuteReader())
{
    do 
    {
       while (rdr.Read())
       {
           //do something with each record
       }
    } while(rdr.NextResult());
}

这篇关于使用以SQLReader的从存储过程返回多个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆