【问题标题】:How to get datarow cell value with column name datatable如何使用列名数据表获取数据行单元格值
【发布时间】:2014-06-15 05:03:07
【问题描述】:

让我先告诉你我现在在做什么以及我面临什么问题。

现在我正在使用 SqlDataReader 从数据库中获取数据,我的函数看起来像

 public List<TOPIC_REPORT> gettopicreports()
        {
            query = "SELECT * FROM [Topic Reports]";
            List<TOPIC_REPORT> rpl = new List<TOPIC_REPORT>();
            try
            {
                con.Open();
                com = new SqlCommand(query, con);
                sdr = com.ExecuteReader();
                while (sdr.Read())
                {
                    rt = new TOPIC_REPORT();
                    rt.ContentId = sdr.GetString(0);
                    rt.TimesReported = sdr.GetInt64(1);
                    rt.IsBanned = sdr.GetInt32(2);
                    rpl.Add(rt);

                }
                con.Close();
                return rpl;

            }
            catch (Exception e)
            {
                con.Close();
                throw e;
            }
        }

上面代码的问题

  1. 需要将值分配给类变量,并且多选查询存在问题。
  2. 需要处理 ResultSet 、while 循环等

以上问题解决方案使用SqlDataAdapter。

public DataSet getdata()
        {
            com.CommandText = "GetMasterPageData";
            com.Connection = con;
            com.CommandType = CommandType.StoredProcedure;
            con.Open();
            SqlDataAdapter adapter = new SqlDataAdapter(com);
            DataSet ds = new DataSet();
            adapter.Fill(ds);
            con.Close();
            return ds;
        } 

这解决了上述问题,但是

  1. 降低我的 prog 可读性,因为我的前端人员不知道我在 DataSet 中发送 DataTables 的顺序。
  2. 不知道 DataTable 中选定值的顺序。
  3. 前端人员需要处理最后的列索引会有问题。

建议我应该怎么做才能解决上述问题。

【问题讨论】:

  • 你是说在第一个代码块中你想返回多个结果集?您的查询看起来好像只会返回一个。如果要返回多个结果集,它们是否都具有相同的列?
  • 我需要返回多个不同列的结果集。
  • @HotCoolStud 请分享您的存储过程

标签: c# sql datatable sqldatareader sqldataadapter


【解决方案1】:

您可以通过组合所有查询来更改查询以返回多个结果集。例如:

query = "SELECT * FROM [Topic Reports]; SELECT * FROM [Other table]";

使用SqlDataReader.Read 迭代第一个结果集后,使用SqlDataReader.NextResultSet() 方法得到第二个结果,然后使用SqlDataReader.Read 迭代第二个结果集。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.nextresult(v=vs.110).aspx

附带说明,如果您这样做,那么您将不得不找出一种从您的方法中返回两种类型对象的集合的方法。最好只使用一种方法来获取对象 A 的集合,并使用不同的方法来获取对象 B 的集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    相关资源
    最近更新 更多