Tag: datareader

我可以从DataReader创建匿名类型集合吗?

我有这个代码: var query = “SELECT * FROM Cats”; var conn = new SqlConnection(sqlConnectionString); conn.Open(); var cmd = new SqlCommand(query); var reader = cmd.ExecuteReader(); while (reader.Read()) { var CatName = reader.GetString(0); var CatDOB = reader.GetDateTime(1); var CatStatus = reader.GetInt32(2); } 我想把行拉成一个匿名类型集合,我通常使用LINQ来迭代,但我不确定是否可能由于你每次都要调用.Read()的方式下一行。 有没有办法做到这一点?

我想知道迭代数据读取器对象时’yield’的连接状态和对代码性能的影响

这是我用来从数据库中获取数据的示例代码:在DAO层: public IEnumerable GetDATA(ICommonSearchCriteriaDto commonSearchCriteriaDto) { using(DbContext) { DbDataReader reader = DbContext.GetReader(“ABC_PACKAGE.GET_DATA”, oracleParams.ToArray(), CommandType.StoredProcedure); while (reader.Read()) { yield return reader; } } } 在BO层我调用上面的方法,如: List GridDataDtos = MapMultiple(_costDriversGraphDao.GetGraphData(commonSearchCriteriaDto)).ToList(); 在mapper层上MapMultiple方法的定义如下: public IGridDataDto MapSingle(IDataRecord dataRecord) { return new GridDataDto { Code = Convert.ToString(dataRecord[“Code”]), Name = Convert.ToString(dataRecord[“Name”]), Type = Convert.ToString(dataRecord[“Type”]) }; } public IEnumerable MapMultiple(IEnumerable dataRecords) { return […]

可以在SQL中的数据库中完成二进制搜索吗?

好。 我使用C#编程语言访问一个简单的数据库(在Microsoft SQL Server上) 目前,我正在使用DataReader对象来访问数据库。 所以这是我的问题:是否可以对特定的数据进行二进制搜索(在C#中),以便我可以更快地进行搜索? 目前,我正在使用简单的while循环来搜索数据库的内容。 我相信这是顺序完成的。 while (pReader.Read()) { if ((String)pReader[“theData”] == “The_thing_im_searching_for”) break; } 那么有没有办法进行二分搜索?

使用datareader时,可以在网络缓冲区中存储多少数据

我们都知道datareader就像 datareader一次读取一条记录,但它从底层数据库驱动程序读取它。 数据库驱动程序通常使用8千字节的缓冲区以块为单位从数据库中读取数据。 如果您的结果记录很小并且您没有得到很多,那么它们都将适合缓冲区,并且数据库驱动程序将能够将它们全部提供给数据读取器,而无需向数据库请求更多数据。 如果你获取的结果大于缓冲区,你将只能读取它的第一部分,当网络缓冲区中不存在数据时,datareader将通知sql server发送下一个数据块。 这里是我们使用数据阅读器的小代码 String selectString = “SELECT * FROM PRODUCT”; IList clients = new List(); using (var selectCommand = new OracleCommand(connection, selectString)) { using (OracleDataReader selectReader = selectCommand.ExecuteReader()) { if (selectReader.HasRows) { while (selectReader.Read()) { clientes.add( GetDomainObject(selectReader) ); } selectReader.close(); } } } 假设PRODUCT表有10,000条记录。 所以我想知道一次有多少数据可以容纳在网络缓冲区中? 因为当datareader.ExecuteReader()调用时,读取器将获取一个数据块并存储在该pc的网络缓冲区中。 当datareader.read()将调用时,单个数据将从缓冲区转发到读取器。 当所有读取都将从缓冲区中读取时,将再次进行数据库调用,并将下一个数据块存储在缓冲区中。 我只是想知道从db获取数据时数据读取器可以在缓冲区中存储多少数据。 数据读取器总是从db中获取固定数量的行并存储在缓冲区中,还是取决于缓冲区大小? 缓冲区大小取决于什么……它取决于ram? […]

DataReader – 硬编码序数?

从DataReader返回数据时,我通常会使用DataReader上的序号引用来获取相关列: if (dr.HasRows) Console.WriteLine(dr[0].ToString()); 要么 if (dr.HasRows) Console.WriteLine(dr.GetString(0)); 要么 if (dr.HasRows) Console.WriteLine((string)dr[0]); 我一直这样做是因为在早期阶段我被告知使用dr[“ColumnName”]或更优雅的索引方式会导致性能下降。 然而,尽管对数据实体的所有引用都变得越来越强烈,但我对此感到更加不安。 我也知道上面没有检查DBNull 。 从DataReader返回数据的最强大的方法是什么?

我如何遍历OracleDataReader的所有列

我有以下代码,我想循环遍历此查询结果中的所有字段,并填充称为字段的字典。 鉴于datareader这可能吗? OracleCommand command = connection.CreateCommand(); string sql = “Select * from MYTABLE where ID = ” + id; command.CommandText = sql; Dictionary fields = new Dictionary(); OracleDataReader reader = command.ExecuteReader();

如何处理多个ResultSet,每个ResultSet有多个行? IDataReader.NextResult()结束Read()

如何处理多个ResultSet,每个ResultSet有多个行? 对NextResult()的调用打破了while循环。 我的一些SP返回多个ResultSet。 我正在使用NextResult()处理这些,但是当我这样做并且我的SP只有一个ResultSet时,我看到带有Read()的while循环完成后只剩下第一行。 如果没有调用NextResult()我会得到第一个ResultSet的所有行,但当然第二个和后续的ResultSet不会得到处理? using (IDataReader reader = storedProcedure.ExecuteReader( CommandBehavior.CloseConnection, parameterNames as string[], arguments)) { while (reader.Read()) { ArrayList row = new ArrayList(); for (int j = 0; j < reader.FieldCount; ++j) { object rowValue = reader.GetValue(j); row.Add(rowValue); } reader.NextResult();//next resultset, breaks out of the while } }

C #MySQL第二个DataReader在DataReader while循环中

正如你可能从标题中猜到的那样,我试图这样做: #region check new nations private void checknewnations() { addtolog(“server”,”Checking for new nations”); string sql = “SELECT * FROM ” + variables.tbl_nations + ” WHERE nations_new=0″; MySqlCommand cmd = new MySqlCommand(sql, connection); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { addtolog(“mysql”,reader[“nations_name”].ToString()); int nation_ID = int.Parse(reader[“nations_ID”].ToString()); string nation_name = reader[“nations_name”].ToString(); string user_ID = reader[“nations_user”].ToString(); addnation(nation_ID, nation_name, user_ID); […]

使用DataReader读取日期

我用数据读取器读取了这种格式的字符串。 如何使用类似格式阅读日期? while (MyReader.Read()) { TextBox1.Text = (string)MyReader[“Note”]; }

将数据读取器中的行转换为键入的结果

我正在使用第三方库来返回数据读取器。 我想要一个简单的方法,并尽可能通用将其转换为对象列表。 例如,假设我有一个具有2个属性EmployeeId和Name的“Employee”类,我希望将数据读取器(包含员工列表)转换为List 。 我想我别无选择,只能迭代数据阅读器的各行,并为每一行将它们转换为我将添加到List的Employee对象。 更好的解决方案? 我正在使用C#3.5,理想情况下我希望它尽可能通用,以便它适用于任何类(DataReader中的字段名称与各种对象的属性名称匹配)。