如何批量查询不同数据集中的存储过程.CREATEPROCEDURE[dbo].[usp_Details](@statusint,@Idint)ASbegin选择u.Id,u.FName,u.ImageName,u.ImagePath,u.SexFROM[User]asuwhereu.IdIN(SELECTMyIdasIdFROMFriendsWHEREFriendId=@IdANDFriendStatus=0)SelectPoints,FNamefrom[User]whereId=@IdSELECTImagePathfrom[User]whereId=@Idend现在,我该怎么做制作单个查询绑定数据表/数据集。示例:dataset1的query1,dataset2的query2,dataset3的query3如果这不可能,避免每次获取不同表时连接到数据库的最佳方法是什么。不确定您是否可以使用数据集执行此操作,但您始终可以回退到杠杆率较低的ADO.NETAPI。SqlReader通过NextResult方法支持多个结果集。这是一种方式。您可以轻松地移回DataTable数组,而无需将它们包装在DataSet中。从资源的角度来看更好,因为DataSet是一个非常重量级的类。DataSet几乎是一个内存中的关系数据库,它为DataTable之间建立关系和约束实施提供各种支持。DataTable根本不需要成为DataSet的一部分。它基本上只是一个容器。这是代码:staticDataSet[]ExecStoredProcedure(){DataSet[]instance=null;conststringcredentials="DataSource=localhost;InitialCatalog=sandbox;IntegratedSecurity=SSPI;";使用(SqlConnectionconnection=newSqlConnection(凭证))使用(SqlCommandcommand=connection.CreateCommand())使用(SqlDataAdapteradapter=newSqlDataAdapter(command))使用(DataSetresults=newDataSet()){command.CommandType=CommandType。存储过程;command.CommandText=@"someStoredProced";connection.Open();adapter.Fill(结果);连接.关闭();列表list=newList(results.Tables.Count);while(results.Tables.Count>0){DataTabledt=结果。表格[0];结果.Tables.RemoveAt(0);数据集ds=new数据集();ds.Tables.Add(dt);列表.添加(ds);}instance=list.ToArray();}返回实例;执行返回多个结果集的存储过程的另一个选项将指定的结果集作为DataTable返回。到达所需的结果集合时,存储过程的执行会短路径:staticDataTableExecStoredProcedure(stringsomeStoredProcedure,intdesiredTableNumber){DataTableinstance=null;conststringcredentials="DataSource=localhost;InitialCatalog=sandbox;IntegratedSecurity=SSPI;";使用(SqlConnectionconnection=newSqlConnection(凭证))使用(SqlCommandcommand=connection.CreateCommand()){command.CommandType=CommandType.StoredProcedure;command.CommandText=someStoredProcedure;connection.Open();使用(SqlDataReaderreader=command.ExecuteReader()){inti=0;while(reader.HasRows){//抛出任何不需要的结果;if(instance!=null)instance.Dispose();//抛出不需要的结果instance=newDataTable();instance.Load(阅读器);如果(我==desiredTableNumber||reader.IsClosed)中断;++我;}if(i!=desiredTableNumber){if(instance!=null)instance.Dispose();实例=空;}//尝试整理以便连接不是软管,如果我们短路执行command.Cancel();读者。关闭();}命令.取消();连接.关闭();}返回实例;我得到了答案,但仍然需要一个建议,是否值得使用以上就是C#学习教程:如何获取存储过程在不同数据集中的批量查询全部内容分享。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注—privatevoidGetMultiSelect(){using(SqlConnectioncon=newSqlConnection(ConfigurationManager.ConnectionStrings["dbConnect1"].ConnectionString)){使用(SqlCommandcmd=newSqlCommand()){cmd.Connection=con;cmd.CommandText="usp_AllDetail";cmd.CommandType=CommandType.StoredProcedure;SqlParametersqlParam=cmd.Parameters.Add("@Id",SqlDbType.Int,4);sqlParam.Value=1;//dataset对象获取所有select语句结果DataSetds=newDataSet();//sqldataadoptortofilldatasetusing(SqlDataAdapteradp=newSqlDataAdapter(cmd)){//这里所有的select语句都是填充数据集对象adp.Fill(ds);//现在您可以通过在数据集中提供表索引来获取每个选择语句foreach(DataTabledtinds.Tables){//selectstatementresultindt..}//或者代替循环,您可以指定索引GridView1。数据源=ds.Tables[1];//首先tselect语句结果GridView1.DataBind();GridView2.DataSource=ds.Tables[0];//第二个选择语句结果GridView2.DataBind();}}}}本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
