Tag: sqldatareader

如果您已经关闭了SqlConnection,是否需要关闭/处理SqlDataReader?

我注意到了这个问题 ,但我的问题更加具体。 使用有什么好处 using (SqlConnection conn = new SqlConnection(conStr)) { using (SqlCommand command = new SqlCommand()) { // dostuff } } 代替 using (SqlConnection conn = new SqlConnection(conStr)) { SqlCommand command = new SqlCommand(); // dostuff } 显然,如果您计划使用相同的连接运行多个命令,这很重要,因为关闭SqlDataReader比关闭并重新打开连接更有效(调用conn.Close();conn.Open();也将释放连接)。 我看到许多人坚持认为无法关闭SqlDataReader意味着保留开放的连接资源,但这不仅适用于您不关闭连接吗?

如何使DataReader从一开始就重新开始读取?

如何制作dr.Read(); 如果条件满足,从头开始再读? 就像是: sqlDataReader dr = command.ExecuteReader(); for(int i=0; dr.Read() ; i++){ if(condition ){ //let dr.Read() start reading from the beginning } }

SqlDataReader和SqlCommand

我有以下代码。 using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings[“ConnectionString”].ConnectionString)) { connection.Open(); SqlCommand select = new SqlCommand(“SELECT RTRIM(LTRIM(PART_NO)) AS PART_NO, record FROM [RMAData].[dbo].[IMPORTING_ORDER_EDI] WHERE sessionID = ‘” + Session.SessionID + “‘”, connection); SqlDataReader reader = select.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { if (!currentPart.IsActive) { // this part is not active, set the active flag in sql to […]

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返回数据的最强大的方法是什么?

ASP.NET中嵌套的SqlDataReader“已经是一个开放的DataReader”exception

我想在下面的代码中使用嵌套的SqlDataReader,但是我无法实现它。我得到“System.InvalidOperationException:已经有一个与此命令关联的打开的DataReader,必须先用代码关闭”。 有什么建议 c = “select user_Reps.rep_key,Officers.Officer_Name from user_Reps left join Officers on user_Reps.rep_key = Officers.Officer_code where [user_key]=”+userCode; if (c == null) c = sr.ReadToEnd(); try { SqlCommand cmd = new SqlCommand(c, cn); cn.Open(); SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); List<Dictionary> list = new List<Dictionary>(); SqlDataReader rdr2; while (rdr.Read()) { string c2 = “select Active_Clients.Clients_code,Active_Clients.Clients_Name,Active_Clients.Geo_code from Active_Clients where […]

超时exception导致SqlDataReader关闭?

我正在尝试从数据库中提取一些二进制数据并将其写入pdf文件。 在大多数情况下,这是在游泳,但偶尔的数据行似乎抛出一个特定的错误 – 超时已过期。 操作完成之前经过的超时时间或服务器没有响应。 请记住,这只发生在少数行上,并且从不随机。 相同的行总是抛出exception。 我不确定为什么会抛出exception,但我可以跳过导致问题并继续前进的行。 然而,我的问题是,当我捕获exception然后尝试移动到下一行时,我遇到另一个exception – InvalidOperationException – 读取器关闭时无效尝试调用Read。 这是否意味着读者一旦遇到exception就会自动关闭? 如何在没有任何戏剧的情况下继续前进到下一行? while (sdrReader.Read()) // Second exception happens here { try { byte[] byteData = new Byte[(sdrReader.GetBytes(0, 0, null, 0, int.MaxValue))]; // first exception happens here sdrReader.GetBytes(0, 0, byteData, 0, byteData.Length); string strOutputFileName = sdrReader.GetInt32(1).ToString() + “.pdf”; msMemoryStreams = new MemoryStream(); msMemoryStreams.Write(byteData, […]

无法将SQL数据读取器数据加载到DataTable中

string query = “select * from cfo_daily_trans_hist”; try { using (SqlConnection connection = new SqlConnection( cnnString)) { SqlCommand command = new SqlCommand(query); command.Connection = connection; connection.Open(); var result = command.ExecuteReader(); DataTable datatable = new DataTable(); datatable.Load(result); connection.Close(); } } 因此var result是通过ExecuteReader();创建的ExecuteReader(); 和HasRows是true ,它显示正确的字段数量。 但是,我从它创建的DataTable是空的。 我究竟做错了什么? 我99%肯定它正在获取数据,但我不知道如何通过SqlDataReader对象找到它以确保。 谢谢。

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; } } 使用SqlDataAdapter : public DataTable populateUsingDataAdapter(string myQuery) { SqlDataAdapter dap […]

如何(有效地)将SqlDataReader字段转换(强制转换)为其对应的c#类型?

首先,让我解释一下当前的情况:我正在从数据库中读取记录并将它们放在一个对象中供以后使用; 今天出现了一个关于C#类型转换(转换?)的数据库类型的问题。 我们来看一个例子: namespace Test { using System; using System.Data; using System.Data.SqlClient; public enum MyEnum { FirstValue = 1, SecondValue = 2 } public class MyObject { private String field_a; private Byte field_b; private MyEnum field_c; public MyObject(Int32 object_id) { using (SqlConnection connection = new SqlConnection(“connection_string”)) { connection.Open(); using (SqlCommand command = connection.CreateCommand()) { command.CommandText […]

MAX(id)使用SqlDataReader C#

我该如何改变: using (SqlCommand myCommand = myConnection.CreateCommand()) { myConnection.Open(); myCommand.CommandText = “SELECT FormID FROM tbl_Form”; using (SqlDataReader reader = myCommand.ExecuteReader()) { while (reader.Read()) { int FormID = reader.GetInt32(reader.GetOrdinal(“FormID”)); MessageBox.Show(FormID.ToString()); } } } 得到MAX(FormID) ? 我的自然倾向是在FormID周围抛出一个MAX,但我得到一个IndexOutOfRangeexception。