c# – SqlDataReader不起作用 – 不读取数据
发布时间:2020-12-16 01:55:27 所属栏目:百科 来源:网络整理
导读:我有一个SqlDataReader,但它永远不会进入Read(). 当我调试它时,它传递循环while(readerOne.Read()).即使有数据,它也永远不会进入这个循环. public static ListPers_Synthese Get_ListeSynthese_all(string codeClient,DateTime DateDeb,DateTime DateFin){ t
我有一个SqlDataReader,但它永远不会进入Read().
当我调试它时,它传递循环while(readerOne.Read()).即使有数据,它也永远不会进入这个循环. public static List<Pers_Synthese> Get_ListeSynthese_all(string codeClient,DateTime DateDeb,DateTime DateFin) { try { using (var connectionWrapper = new Connexion()) { var connectedConnection = connectionWrapper.GetConnected(); string sql_Syntax = Outils.LoadFileToString(Path.Combine(appDir,@"SQLGet_ListeSynthese_All.sql")); SqlCommand comm_Command = new SqlCommand(sql_Syntax,connectionWrapper.conn); comm_Command.Parameters.AddWithValue("@codeClioent",codeClient); comm_Command.Parameters.AddWithValue("@DateDeb",DateDeb); comm_Command.Parameters.AddWithValue("@DateFin",DateFin); List<Pers_Synthese> oListSynthese = new List<Pers_Synthese>(); SqlDataReader readerOne = comm_Command.ExecuteReader(); while (readerOne.Read()) { Pers_Synthese oSyntehse = new Pers_Synthese(); oSyntehse.CodeTrf = readerOne["CODE_TARIF"].ToString(); oSyntehse.NoLV = readerOne["NOID"].ToString(); oSyntehse.PrxUnitaire = readerOne["PRIX_UNITAIRE"].ToString(); oSyntehse.ZoneId = readerOne["LE_ZONE"].ToString(); oSyntehse.LeZone = readerOne["LIB_ZONE"].ToString(); oSyntehse.LeDept = readerOne["DEPT"].ToString(); oSyntehse.LeUnite = readerOne["ENLEV_UNITE"].ToString(); oSyntehse.LePoids = Convert.ToInt32(readerOne["POID"]); //oSyntehse.LePoidsCorr = Convert.ToInt32(readerOne["POID_CORR"]); oSyntehse.LeColis = readerOne["NBR_COLIS"].ToString(); oSyntehse.LeCr = readerOne["NBR_CREMB"].ToString(); oSyntehse.SumMontantCR = readerOne["ENLEV_CREMB"].ToString(); oSyntehse.LeVd = readerOne["NBR_DECL"].ToString(); oSyntehse.SumMontantVD = readerOne["ENLEV_DECL"].ToString(); oSyntehse.LePrixHT = readerOne["PRIX_HT"].ToString(); oSyntehse.LePrixTTC = readerOne["PRIX_TTC"].ToString(); oSyntehse.TrDeb = readerOne["TR_DEB"].ToString(); oSyntehse.TrFin = readerOne["TR_FIN"].ToString(); oListSynthese.Add(oSyntehse); } readerOne.Close(); readerOne.Dispose(); return oListSynthese; } } catch (Exception excThrown) { throw new Exception(excThrown.Message); } } 当我用SQL Server探查器调试它时,它显示数据….这意味着数据不是空的,但它永远不会进入这个循环. while (readerOne.Read()) { 顺便说一下我的连接类: class Connexion : IDisposable { public SqlConnection conn; public SqlConnection GetConnected() { try { string strConnectionString = Properties.Settings.Default.Soft8Exp_ClientConnStr; conn = new SqlConnection(strConnectionString); } catch (Exception excThrown) { conn = null; throw new Exception(excThrown.InnerException.Message,excThrown); } // Ouverture et restitution de la connexion en cours if (conn.State == ConnectionState.Closed) conn.Open(); return conn; } public Boolean IsConnected { get { return (conn != null) && (conn.State != ConnectionState.Closed) && (conn.State != ConnectionState.Broken); } } public void CloseConnection() { // Libération de la connexion si elle existe if (IsConnected) { conn.Close(); conn = null; } } public void Dispose() { CloseConnection(); } } 和我的SQL声明: exec sp_executesql N'SELECT CODE_TARIF,PRIX_UNITAIRE,TR_DEB,TR_FIN,LE_ZONE,T_TARIF_ZONE.LIBELLE as LIB_ZONE,SUBSTRING(CP_DEST,1,2) as DEPT,T_UNITE.LIBELLE as ENLEV_UNITE,count(NOID)as NOID,SUM(CASE WHEN POID_CORR IS NOT NULL THEN POID_CORR ELSE POID END) as POID,sum(NBR_COLIS)as NBR_COLIS,COUNT(NULLIF(ENLEV_CREMB,0))as NBR_CREMB,sum(ENLEV_CREMB)as ENLEV_CREMB,COUNT(NULLIF(ENLEV_DECL,0))as NBR_DECL,sum(ENLEV_DECL)as ENLEV_DECL,sum(PRIX_HT)as PRIX_HT,sum(PRIX_TTC)as PRIX_TTC,sum (POID_CORR)as POID_CORR FROM LETTRE_VOIT_FINAL LEFT JOIN T_TARIF_ZONE ON LETTRE_VOIT_FINAL.LE_ZONE = T_TARIF_ZONE.NO_ID LEFT JOIN T_UNITE ON LETTRE_VOIT_FINAL.ENLEV_UNITE = T_UNITE.NO_ID where code_client = @codeClioent and DATE_CLOTUR_REEL BETWEEN @DateDeb AND @DateFin and STATUT_LV = 2 group by CODE_TARIF,T_TARIF_ZONE.LIBELLE,2),T_UNITE.LIBELLE order by LE_ZONE,PRIX_UNITAIRE ',N'@codeClioent nvarchar(8),@DateDeb datetime,@DateFin datetime',@codeClioent=N'17501613',@DateDeb='2013-06-05 00:00:00',@DateFin='2013-06-05 23:59:00' 它返回SQL profiler上的数据: 我的真实查询: SELECT CODE_TARIF,sum (POID_CORR)as POID_CORR FROM LETTRE_VOIT_FINAL LEFT JOIN T_TARIF_ZONE ON LETTRE_VOIT_FINAL.LE_ZONE = T_TARIF_ZONE.NO_ID LEFT JOIN T_UNITE ON LETTRE_VOIT_FINAL.ENLEV_UNITE = T_UNITE.NO_ID where code_client = @codeClioent and DATE_CLOTUR_REEL BETWEEN @DateDeb AND @DateFin and STATUT_LV = 2 group by CODE_TARIF,T_UNITE.LIBELLE order by LE_ZONE,PRIX_UNITAIRE 这很奇怪….当数据介于: DATE_CLOTUR_REEL BETWEEN '2013-06-05 00:00:00' and '2013-06-05 23:59:00' 但 DATE_CLOTUR_REEL BETWEEN '2013-06-01 00:00:00' and '2013-06-05 23:59:00' 有用. 解决方法
这是应该的方式.你没有进行连接.打开()
还要设置连接字符串. private static void ReadOrderData(string connectionString) { string queryString = "SELECT OrderID,CustomerID FROM dbo.Orders;"; using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand command = new SqlCommand(queryString,connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); // Call Read before accessing data. while (reader.Read()) { ReadSingleRow((IDataRecord)reader); } // Call Close when done reading. reader.Close(); } } 如何做到的完美示例属于MSDN – Microsoft Website 注意: SqlCommand command = new SqlCommand(queryString,connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); >创建SqlCommand 您正在以另一种方式执行此操作,打开它然后创建命令. 我也没有看到你在哪里设置查询字符串,我只是看到你添加参数;你错过了吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |