Tag: datareader

DbDataReader,NextResult()并填充多个表

这个问题是我以前的问题的延续。 没有太多细节,我正在用2个相关的1对多表填充数据集。 所以,我现在的问题是 – 为什么这段代码运作良好 public DataAgencyR_DataSet SelectOne(int id) { DataAgencyR_DataSet result = new DataAgencyR_DataSet(); using (DbCommand command = Connection.CreateCommand()) { try { command.CommandText = SqlStrings.SelectDataAgencyR_SelectOne(); var param = ParametersBuilder.CreateByKey(command, “ID_DeclAgenc”, id, “ID_DeclAgenc”); command.Parameters.Add(param); Connection.Open(); using (DbDataReader reader = command.ExecuteReader()) { while (reader.Read()) { System.Diagnostics.Trace.WriteLine(String.Format(“{0}-{1}”, reader[0], reader[1])); } System.Diagnostics.Trace.WriteLine(“————-“); reader.NextResult(); while (reader.Read()) { System.Diagnostics.Trace.WriteLine(String.Format(“{0}-{1}”, reader[0], […]

我们如何从getschemaTable获取Column Size和dataType?

我是一个新手,我试图从我的数据库中的某些表中检索列NAme,大小(最大legth)和DataType,当我执行它时,以下代码期望它显示所有列类型和名称(我没有找到如何引用Size,我使用了ColumnSize,但据说DataColumn不包含此方法的定义)但在执行时,它只显示:IsColumnSetSystem.Boolean这是代码: private void button1_Click(object sender, EventArgs e) { string EF = textBox1.Text; try{ //SqlDataAdapter adapter = SetupDataAdapter(“SELECT * FROM id_declarant”); SqlCommand comm = new SqlCommand(); string connectionString = @”Data Source=.\SQLEXPRESS;Initial Catalog=declaration;Integrated Security=True”; comm.Connection=new SqlConnection(connectionString); String sql = @”SELECT * FROM id_declarant,declarant WHERE (declarant.Nom_pren_RS='” + EF + “‘) and (id_declarant.mat_fisc=declarant.mat_fisc) “; comm.CommandText = sql; comm.Connection.Open(); SqlDataReader […]

C#如何获取每个列的类型和长度,然后使用长度填充以获取每个字段末尾的空格

我有一个控制台应用程序,它将SQL表中的数据提取到平面文件。 如何获取每个列的类型和长度,然后使用每列的长度填充(长度)以获取每个字段末尾的空格。 以下是我现在所拥有的不包含此function的内容。 谢谢 { var destination = args[0]; var command = string.Format(“Select * from {0}”, Validator.Check(args[1])); var connectionstring = string.Format(“Data Source={0}; Initial Catalog=dbname;Integrated Security=SSPI;”, args[2]); var helper = new SqlHelper(command, CommandType.Text, connectionstring); using (StreamWriter writer = new StreamWriter(destination)) using (IDataReader reader = helper.ExecuteReader()) { while (reader.Read()) { Object[] values = new Object[reader.FieldCount]; int fieldCount […]

读取器关闭时无效尝试调用MetaData?

我正在从datareader运行if else语句来查询表数据并激活/取消激活页面上的某些控件。 当我关闭块时,我实现了一个using语句来自动关闭连接和读取器,但是我的每个if else语句仍然会让读者关闭错误。 少了什么东西? 代码如下: string comnt = “SELECT StatusId FROM Submission WHERE SubmissionId =” + x; using (SqlConnection editConn = new SqlConnection(connectionString)) { editConn.Open(); using (SqlCommand statCmd = new SqlCommand(comnt, editConn)) { SqlDataReader dr = statCmd.ExecuteReader(); dr.Read(); if (dr.GetInt32(0) > 0) { PanelComment.Visible = true; PanelQuote.Visible = false; LnbFid.Visible = false; LnbCrim.Visible = […]

使用C#SQLite DataReader和附加数据库迭代结果的性能问题

我在我的C#项目中使用System.Data.SQLite和SQLiteDataReader 。 在使用附加数据库获取查询结果时,我遇到了性能问题。 以下是将文本搜索到两个数据库的查询示例: ATTACH “db2.db” as db2; SELECT MainRecord.RecordID, ((LENGTH(MainRecord.Value) – LENGTH(REPLACE(UPPER(MainRecord.Value), UPPER(“FirstValueToSearch”), “”))) / 18) AS “FirstResultNumber”, ((LENGTH(DB2Record.Value) – LENGTH(REPLACE(UPPER(DB2Record.Value), UPPER(“SecondValueToSearch”), “”))) / 19) AS “SecondResultNumber” FROM main.Record MainRecord JOIN db2.Record DB2Record ON DB2Record.RecordID BETWEEN (MainRecord.PositionMin) AND (MainRecord.PositionMax) WHERE FirstResultNumber > 0 AND SecondResultNumber > 0; DETACH db2; 使用SQLiteStudio或SQLiteAdmin执行此查询时,此工作正常,我在几秒钟内得到结果(记录表可以包含数十万条记录,查询返回36000条记录)。 在我的C#项目中执行此查询时,执行也需要几秒钟,但运行所有结果需要几个小时。 这是我的代码: // Attach […]

如何轻松地将DbDataReader对象转换为有用的东西?

我使用Entity Framework EntityConnection手动调用存储过程,如下所示: DbConnection storeConnection = entityConnection.StoreConnection; DbCommand command = storeConnection.CreateCommand(); command.CommandText = “sp_GetMyComplexData”; command.CommandType = CommandType.StoredProcedure; DbDataReader reader = command.ExecuteReader(); 这样做的原因是entity framework不容易支持不直接映射到表或视图的实体。 我发现这篇文章( http://dotnet.dzone.com/news/mapping-stored-procedure ),但它需要编辑XML,我想避免。 在我的情况下,我只是运行一个使用LEFT JOIN连接两个表的查询。 之所以这样,是因为我试图将结果绑定到Telerik RadGrid,它不支持分层数据导出,但似乎支持分组数据导出。 问题是,如何将DbDataReader对象转换为可以绑定到RadGrid的有用的东西? 我一直在DAL方法中传递单个对象或IQueryable对象。 有任何想法吗? 提前致谢? 编辑: 我只需要数据。 之后我不需要进行任何插入,更新和删除操作。 它是一个只读视图。

使用SqlDataReader填充c#中的List

我有一个类如下, class Student { public string Name {get; set;} public string Surname {get; set;} public int Age {get; set;} public string Address {get; set;} } 我有一个包含50,000条记录的MySql表。 表的结构如下, ID NAME SURNAME AGE ADDRESS 1 Joe Philip 20 Moscow 2 Misha Johny 25 London … 我有一个C#代码, List students = new List(); string sql = “SELECT name,surname,age,address FROM […]

从IDataReader读取字段时Intermittent System.IndexOutOfRangeException

我在代码中有一个非常奇怪的问题,我不希望它会失败。 它是一个网站,有一些流量但不是很大,基于AspDotNetStoreFront。 尝试从阅读器读取数据库字段时,站点间歇性崩溃。 这发生在网站上的各个地方。 这个代码的一个例子是在对象pValue = rs [“PropertyValueString”]的行下面; private Dictionary GetPropertValuePairs(string userName) { string query = string.Format(“select PropertyName, PropertyValueString from dbo.profile with(nolock) where CustomerGUID = {0} and StoreID = {1}”, DB.SQuote(userName),AppLogic.StoreID()); Dictionary propertyValues = new Dictionary(); using (SqlConnection conn = new SqlConnection(DB.GetDBConn())) { conn.Open(); using (IDataReader rs = DB.GetRS(query, conn)) { while (rs.Read()) { string […]

如何将列添加到DataReader

我的目标是从数据源检索数据,向其添加一些元数据并将其插入另一个目标。 目标具有架构,其中包含四列,然后是源(计算列)。 我正在使用SqlBulkCopy ,它需要一个包含所有列的阅读器(包括计算出的4个)。 有没有办法手动将列添加到DataReader? 或者如果不可能有什么替代方案来插入数据?

虽然在IDataReader.Read上不能使用yield return,但读取器上的foreach会有效

这是一种常见的ADO.NET模式,使用数据读取器从数据库中检索数据,但奇怪的是不起作用。 不起作用: public static IEnumerable SelectDataRecord(string query, string connString) where T : IDbConnection, new() { using (var conn = new T()) { using (var cmd = conn.CreateCommand()) { cmd.CommandText = query; cmd.Connection.ConnectionString = connString; cmd.Connection.Open(); using (var reader = (DbDataReader)cmd.ExecuteReader()) { // the main part while (reader.Read()) { yield return (IDataRecord)reader; } } } } […]