【问题标题】:return data as SqlDataReader以 SqlDataReader 的形式返回数据
【发布时间】:2019-05-29 03:50:18
【问题描述】:

我正在开发一个 ASP.NET 项目。我在 SQL Server 中有一个存储过程,它返回要在图表中显示的数据列表。这个存储过程工作正常。我需要将返回数据作为SqlDataReader 对象传递到Chart.DataBindTable

我这样调用存储过程:

string spName = "spFetchDetails";
DbCommand dbCommand = this.ObjDatabase.GetStoredProcCommand(spName);
this.ObjDatabase.AddInParameter(dbCommand, "@Company", DbType.Int32, Company);
this.ObjDatabase.AddInParameter(dbCommand, "@Title", DbType.String, Title);
this.ObjDatabase.AddInParameter(dbCommand, "@DateRange", DbType.String, DateRange);

DataTable dt = new DataTable();
dt = this.ObjDatabase.ExecuteDataSet(dbCommand).Tables[0];

这里的代码将存储过程结果作为DataTable返回,我想调用ExecuteReader()方法,但我不知道该怎么做。

Chart.DataBindTable(dt, "Example");

这是渲染图表的代码。

以下是我在另一个图表中的操作方法,它正在工作。

SqlCommand cmd = new SqlCommand(
  "Select ai.ItemDescription, ai.ItemRate, los.sellingprice, los.mrp from aitem ai inner join losShopItemShipmentDetail los on los.itemid = ai.itemid", con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();

Chart.DataBindTable(rdr, "ItemDescription");

如何以这种方式调用存储过程?或者有没有办法将 DataTable 传递给 DataBindTable 函数?

public void DataBindTable (System.Collections.IEnumerable dataSource, string xField);

【问题讨论】:

  • SqlDataReader 作为“数据”传递并不是一个好主意 - 最好使用DataTableList<T> 或仅包含的内容数据 - 不是打开的 SqlDataReader 的全部开销 .....
  • 那么如何将datatable传入DataBindTable
  • 好吧 - 检查 文档 以了解您的 Chart 组件 - 我几乎确信 必须 以不同的方式来提供数据而不是通过 SqlDataReader 传递(如果没有:找到更好的图表组件......)
  • @CaiusJard 是的

标签: c# asp.net sql-server


【解决方案1】:

你可以试试这个(示例代码来可视化如何使用它):

Chart c = new Chart();
DataTable dt = new DataTable();
c.DataBindTable(dt.AsEnumerable());

【讨论】:

【解决方案2】:

您可以如下调用存储过程。

SqlCommand cmd = new SqlCommand("<SqlProcedureName>", con)
cmd.CommandType = CommandType.StoredProcedure;

但不是将 datareader 分配给图表控件。寻找另一种方式来设置数据而已

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多