相关疑难解决方法(0)

如何轻松将DataReader转换为List <T>?

我有一个数据DataReader,我希望将其转换为List<T>.对此有什么简单的解决方案?

例如,在CustomerEntity类中,我有CustomerId和CustomerName属性.如果我的DataReader将这两列作为数据返回,那么我该如何将其转换为List<CustomerEntity>.

c# datareader generic-list

112
推荐指数
8
解决办法
26万
查看次数

将SQL表读入C#DataTable

我已经阅读了很多关于将DataTable插入SQL表的帖子,但是有一种简单的方法可以将SQL表拉入.NET DataTable吗?

.net c# sql asp.net datatable

80
推荐指数
4
解决办法
33万
查看次数

SqlDataReader vs SqlDataAdapter:哪一个具有更好的返回DataTable的性能?

我想知道哪一个具有更好的返回性能DataTable.SqlDataReader我在这里使用DataTable.Load(dr)

使用SqlDataReader:

public static DataTable populateUsingDataReader(string myQuery)
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(constring))
    {
        SqlCommand cmd = new SqlCommand(myQuery, con);
        con.Open();
        SqlDataReader dr = null;
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        if (dr.HasRows)
        {
            dt.Load(dr);
        }
        return dt;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用SqlDataAdapter:

public DataTable populateUsingDataAdapter(string myQuery)
{
    SqlDataAdapter dap = new SqlDataAdapter(myQuery,cn);
    DataSet ds = new DataSet();
    dap.Fill(ds);
    return ds.Tables[0];
}
Run Code Online (Sandbox Code Playgroud)

c# datatable performance sqldatareader sqldataadapter

25
推荐指数
3
解决办法
5万
查看次数

如何用多个表填充数据集?

我正在尝试填充包含2个具有一对多关系的表的DataSet.我正在使用DataReader来实现这个目的:

    public DataSet SelectOne(int id)
    {
        DataSet result = new DataSet();
        using (DbCommand command = Connection.CreateCommand())
        {
            command.CommandText = "select * from table1";

            var param = ParametersBuilder.CreateByKey(command, "ID", id, null);
            command.Parameters.Add(param);

            Connection.Open();
            using (DbDataReader reader = command.ExecuteReader())
            {
                result.MainTable.Load(reader);
            }
            Connection.Close();
        }
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

但我只填了一张桌子.我如何实现目标 - 填写两个表格?

如果可能的话,我想使用DataReader而不是DataAdapter.

c# sql ado.net datareader dataset

19
推荐指数
3
解决办法
10万
查看次数

将datatable转换为datareader

为了提高性能,我想将datatable转换为datareader.我不能通过查询来做到这一点.那么还有其他方法吗?

c# ado.net

14
推荐指数
1
解决办法
3万
查看次数

在Using语句中从DataLayer返回DataReader

我们有很多数据层代码遵循这个非常通用的模式:

public DataTable GetSomeData(string filter)
{
    string sql = "SELECT * FROM [SomeTable] WHERE SomeColumn= @Filter";

    DataTable result = new DataTable();
    using (SqlConnection cn = new SqlConnection(GetConnectionString()))
    using (SqlCommand cmd = new SqlCommand(sql, cn))
    {
        cmd.Parameters.Add("@Filter", SqlDbType.NVarChar, 255).Value = filter;

        result.Load(cmd.ExecuteReader());
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我想我们可以做得更好一点.我现在的主要抱怨是它强制将所有记录加载到内存中,即使对于大型集合也是如此.我希望能够利用DataReader的能力,一次只能在ram中保留一条记录,但如果我直接返回DataReader,则在离开using块时会切断连接.

如何改进这一点以允许一次返回一行?

.net c# database .net-2.0

10
推荐指数
2
解决办法
1万
查看次数

如果DataReader返回两个结果集,则无法使用DataTable.Load()方法

为了提高性能,我试图消除Dataset的使用并实现DataReader。在这里,我的Oracle Procedure返回两个引用,并且当我将第一个记录集加载到第一个DataTable中时,下一个永远不会加载。

示例代码如下所示:

DataSet ds = new DataSet();
        using (OracleConnection db = new OracleConnection(conString))
        {
            try
            {
                using (OracleCommand mycom = new OracleCommand())
                {
                    mycom.CommandText = "myPkg.pr_mySP";
                    mycom.Connection = db;
                    mycom.CommandType = CommandType.StoredProcedure;

                    mycom.Parameters.Add("ref_list1", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
                    mycom.Parameters.Add("ref_list2", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
                    //mycom.FetchSize = mycom.FetchSize * 64;

                    db.Open();
                    using (OracleDataReader reader = mycom.ExecuteReader())
                    {

                        DataTable custMapList = new DataTable("dtcustMapList");
                        custMapList.Load(reader);

                        reader.NextResult(); // POST THIS THE SECOND DATATABLE DOESNOT GETTING POPULATED 
                        DataTable custMapSubList = new DataTable("dtcustMapSubList");
                        custMapSubList.Load(reader);

                        ds.Tables.Add(custMapList);
                        ds.Tables.Add(custMapSubList);
                    }
                }
            } …
Run Code Online (Sandbox Code Playgroud)

c# datatable ado.net sqldatareader

4
推荐指数
1
解决办法
1427
查看次数