use*_*628 5 c# sql-server sqldatareader
我有一个SqlDataReader,但它永远不会进入Read()。
当我调试它时,它通过了循环while(readerOne.Read())。即使有数据,它也不会进入这个循环。
public static List<Pers_Synthese> Get_ListeSynthese_all(string codeClient, DateTime DateDeb, DateTime DateFin)\n{\n try\n {\n using (var connectionWrapper = new Connexion())\n {\n var connectedConnection = connectionWrapper.GetConnected();\n\n string sql_Syntax = Outils.LoadFileToString(Path.Combine(appDir, @"SQL\\Get_ListeSynthese_All.sql"));\n\n SqlCommand comm_Command = new SqlCommand(sql_Syntax, connectionWrapper.conn);\n comm_Command.Parameters.AddWithValue("@codeClioent", codeClient);\n comm_Command.Parameters.AddWithValue("@DateDeb", DateDeb);\n comm_Command.Parameters.AddWithValue("@DateFin", DateFin);\n\n List<Pers_Synthese> oListSynthese = new List<Pers_Synthese>();\n\n SqlDataReader readerOne = comm_Command.ExecuteReader();\n\n while (readerOne.Read())\n {\n Pers_Synthese oSyntehse = new Pers_Synthese();\n oSyntehse.CodeTrf = readerOne["CODE_TARIF"].ToString();\n oSyntehse.NoLV = readerOne["NOID"].ToString();\n oSyntehse.PrxUnitaire = readerOne["PRIX_UNITAIRE"].ToString();\n oSyntehse.ZoneId = readerOne["LE_ZONE"].ToString();\n oSyntehse.LeZone = readerOne["LIB_ZONE"].ToString();\n oSyntehse.LeDept = readerOne["DEPT"].ToString();\n oSyntehse.LeUnite = readerOne["ENLEV_UNITE"].ToString();\n oSyntehse.LePoids = Convert.ToInt32(readerOne["POID"]);\n //oSyntehse.LePoidsCorr = Convert.ToInt32(readerOne["POID_CORR"]);\n oSyntehse.LeColis = readerOne["NBR_COLIS"].ToString();\n oSyntehse.LeCr = readerOne["NBR_CREMB"].ToString();\n oSyntehse.SumMontantCR = readerOne["ENLEV_CREMB"].ToString();\n oSyntehse.LeVd = readerOne["NBR_DECL"].ToString();\n oSyntehse.SumMontantVD = readerOne["ENLEV_DECL"].ToString();\n oSyntehse.LePrixHT = readerOne["PRIX_HT"].ToString();\n oSyntehse.LePrixTTC = readerOne["PRIX_TTC"].ToString();\n oSyntehse.TrDeb = readerOne["TR_DEB"].ToString();\n oSyntehse.TrFin = readerOne["TR_FIN"].ToString();\n\n oListSynthese.Add(oSyntehse);\n }\n readerOne.Close();\n readerOne.Dispose();\n return oListSynthese;\n }\n }\n catch (Exception excThrown)\n {\n throw new Exception(excThrown.Message);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当我使用 SQL Server Profiler 调试它时,它显示数据......这意味着数据不为空,但它永远不会进入此循环。
\n\nwhile (readerOne.Read())\n{\nRun Code Online (Sandbox Code Playgroud)\n\n顺便说一下我的连接类:
\n\n class Connexion : IDisposable \n {\n public SqlConnection conn;\n public SqlConnection GetConnected()\n {\n try\n {\n string strConnectionString = Properties.Settings.Default.Soft8Exp_ClientConnStr;\n conn = new SqlConnection(strConnectionString);\n }\n catch (Exception excThrown)\n {\n conn = null;\n throw new Exception(excThrown.InnerException.Message, excThrown);\n }\n\n // Ouverture et restitution de la connexion en cours\n if (conn.State == ConnectionState.Closed) conn.Open();\n return conn;\n }\n\n public Boolean IsConnected\n {\n get { return (conn != null) && (conn.State != ConnectionState.Closed) && (conn.State != ConnectionState.Broken); }\n }\n\n public void CloseConnection()\n {\n // Lib\xc3\xa9ration de la connexion si elle existe\n if (IsConnected)\n {\n conn.Close();\n conn = null;\n\n }\n\n }\n\n public void Dispose()\n {\n CloseConnection();\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n和我的 SQL 语句:
\n\nexec sp_executesql N\'SELECT CODE_TARIF,PRIX_UNITAIRE,TR_DEB,TR_FIN,LE_ZONE,T_TARIF_ZONE.LIBELLE as LIB_ZONE,\n SUBSTRING(CP_DEST,1,2) as DEPT,T_UNITE.LIBELLE as ENLEV_UNITE,\n count(NOID)as NOID,\n 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\n FROM LETTRE_VOIT_FINAL\n LEFT JOIN T_TARIF_ZONE ON LETTRE_VOIT_FINAL.LE_ZONE = T_TARIF_ZONE.NO_ID\n LEFT JOIN T_UNITE ON LETTRE_VOIT_FINAL.ENLEV_UNITE = T_UNITE.NO_ID\n where code_client = @codeClioent\n and DATE_CLOTUR_REEL BETWEEN @DateDeb AND @DateFin\n and STATUT_LV = 2\n\n group by CODE_TARIF,PRIX_UNITAIRE,TR_DEB,TR_FIN,LE_ZONE,T_TARIF_ZONE.LIBELLE,SUBSTRING(CP_DEST,1,2),T_UNITE.LIBELLE\n order by LE_ZONE,PRIX_UNITAIRE\n\n\',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\'\nRun Code Online (Sandbox Code Playgroud)\n\n它返回 SQL 探查器上的数据:\n
我真正的查询:
\n\nSELECT CODE_TARIF,PRIX_UNITAIRE,TR_DEB,TR_FIN,LE_ZONE,T_TARIF_ZONE.LIBELLE as LIB_ZONE,\n SUBSTRING(CP_DEST,1,2) as DEPT,T_UNITE.LIBELLE as ENLEV_UNITE,\n count(NOID)as NOID,\n 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\n FROM LETTRE_VOIT_FINAL\n LEFT JOIN T_TARIF_ZONE ON LETTRE_VOIT_FINAL.LE_ZONE = T_TARIF_ZONE.NO_ID\n LEFT JOIN T_UNITE ON LETTRE_VOIT_FINAL.ENLEV_UNITE = T_UNITE.NO_ID\n where code_client = @codeClioent\n and DATE_CLOTUR_REEL BETWEEN @DateDeb AND @DateFin\n and STATUT_LV = 2\n\n group by \n\n CODE_TARIF,PRIX_UNITAIRE,TR_DEB,TR_FIN,LE_ZONE,T_TARIF_ZONE.LIBELLE,SUBSTRING(CP_DEST,1,2),T_UNITE.LIBELLE\n order by LE_ZONE,PRIX_UNITAIRE\nRun Code Online (Sandbox Code Playgroud)\n\n这很奇怪......当数据介于以下之间时:
\n\nDATE_CLOTUR_REEL BETWEEN \'2013-06-05 00:00:00\' and \'2013-06-05 23:59:00\'\nRun Code Online (Sandbox Code Playgroud)\n\n但
\n\nDATE_CLOTUR_REEL BETWEEN \'2013-06-01 00:00:00\' and \'2013-06-05 23:59:00\'\nRun Code Online (Sandbox Code Playgroud)\n\n有用。
\n事情本应如此。您没有执行“connection.Open()
同时设置连接字符串”。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何做到这一点的完美示例属于MSDN - 微软网站
注意:
SqlCommand command =
new SqlCommand(queryString, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)
SqlCommand您正在以另一种方式执行此操作,打开它然后创建命令。
我也没有看到你在哪里设置查询字符串,我只是看到你添加了参数;你错过了吗?
| 归档时间: |
|
| 查看次数: |
15082 次 |
| 最近记录: |