C# 如何遍历字典的字符串列表?
我有下面的代码。我有一个返回多行的Oracle查询。我需要将数据填入dictionaries列表,但我有一个问题,那就是列表总是用重复的最后一行填充。如何使用每个Oracle行迭代列表 守则:C# 如何遍历字典的字符串列表?,c#,oracle,list,dictionary,C#,Oracle,List,Dictionary,我有下面的代码。我有一个返回多行的Oracle查询。我需要将数据填入dictionaries列表,但我有一个问题,那就是列表总是用重复的最后一行填充。如何使用每个Oracle行迭代列表 守则: var list = new List<string>(); List<Dictionary<String, String>> listDic = new List<Dictionary<String, String>>();
var list = new List<string>();
List<Dictionary<String, String>> listDic = new List<Dictionary<String, String>>();
using (var con = new OracleConnection(Config.EDLRDev))
{
var com = con.CreateCommand();
try
{
con.Open();
com.CommandText = "SELECT * FROM edlr_comm_rep_total a where a.dealer_id = 'wb-pos00289' and a.comm_type = 'Activation' ";
//com.Parameters.Add("msisdn", OracleDbType.Char).Value = msisdn;
Dictionary<String, String> objDic = new Dictionary<string, string>();
var reader = com.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
string CommissionDealerId = reader[0].ToString();
string Month = reader[1].ToString();
string DealerCommissionType = reader[2].ToString();
string CommissionCount = reader[3].ToString();
string CommissionAmount = reader[4].ToString();
objDic["CommissionDealerId"] = CommissionDealerId;
objDic["Month"] = Month;
objDic["DealerCommissionType"] = DealerCommissionType;
objDic["CommissionCount"] = CommissionCount;
objDic["CommissionAmount"] = CommissionAmount;
listDic.Add(objDic);
}
}
reader.Close();
}
catch (Exception ex)
{
con.Dispose();
}
con.Dispose();
return listDic;
}
var list=newlist();
List listDic=新列表();
使用(var con=neworacleconnection(Config.EDLRDev))
{
var com=con.CreateCommand();
尝试
{
con.Open();
com.CommandText=“从edlr_comm_rep_total a中选择*,其中a.dealer_id='wb-pos00289'和a.comm_type='Activation';
//Add(“msisdn”,OracleDbType.Char).Value=msisdn;
字典objDic=新字典();
var reader=com.ExecuteReader();
if(reader.HasRows)
{
while(reader.Read())
{
string CommissionDealerId=读取器[0]。ToString();
字符串月份=读取器[1]。ToString();
字符串DealerCommissionType=读取器[2]。ToString();
string CommissionCount=读取器[3]。ToString();
string CommissionAmount=读取器[4]。ToString();
objDic[“CommissionDealerId”]=CommissionDealerId;
objDic[“月”]=月;
objDic[“DealerCommissionType”]=DealerCommissionType;
objDic[“佣金计数”]=佣金计数;
objDic[“佣金金额”]=佣金金额;
添加(objDic);
}
}
reader.Close();
}
捕获(例外情况除外)
{
con.Dispose();
}
con.Dispose();
返回列表;
}
您需要在循环内初始化objDic
:
var reader = com.ExecuteReader();
if (reader.HasRows) {
while (reader.Read()) {
Dictionary<String, String> objDic = new Dictionary<string, string>(); // MOVED!
string CommissionDealerId = reader[0].ToString();
string Month = reader[1].ToString();
string DealerCommissionType = reader[2].ToString();
string CommissionCount = reader[3].ToString();
string CommissionAmount = reader[4].ToString();
objDic["CommissionDealerId"] = CommissionDealerId;
objDic["Month"] = Month;
objDic["DealerCommissionType"] = DealerCommissionType;
objDic["CommissionCount"] = CommissionCount;
objDic["CommissionAmount"] = CommissionAmount;
listDic.Add(objDic);
}
}
var reader=com.ExecuteReader();
if(reader.HasRows){
while(reader.Read()){
Dictionary objDic=新建字典();//已移动!
string CommissionDealerId=读取器[0]。ToString();
字符串月份=读取器[1]。ToString();
字符串DealerCommissionType=读取器[2]。ToString();
string CommissionCount=读取器[3]。ToString();
string CommissionAmount=读取器[4]。ToString();
objDic[“CommissionDealerId”]=CommissionDealerId;
objDic[“月”]=月;
objDic[“DealerCommissionType”]=DealerCommissionType;
objDic[“佣金计数”]=佣金计数;
objDic[“佣金金额”]=佣金金额;
添加(objDic);
}
}
否则,您只需重新更改相同的实例。您使用的是在while循环外部实例化的同一字典
objDic
。每次通过循环时,只需替换字典的值。在您的列表中,您正在添加对同一objDic字典的引用,这就是为什么您有重复的。您需要在while循环中的每次传递中创建一个新字典
try
{
con.Open();
com.CommandText = "SELECT * FROM edlr_comm_rep_total a where a.dealer_id = 'wb-pos00289' and a.comm_type = 'Activation' ";
//com.Parameters.Add("msisdn", OracleDbType.Char).Value = msisdn;
var reader = com.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Dictionary<String, String> objDic = new Dictionary<string, string>();
string CommissionDealerId = reader[0].ToString();
string Month = reader[1].ToString();
string DealerCommissionType = reader[2].ToString();
string CommissionCount = reader[3].ToString();
string CommissionAmount = reader[4].ToString();
objDic["CommissionDealerId"] = CommissionDealerId;
objDic["Month"] = Month;
objDic["DealerCommissionType"] = DealerCommissionType;
objDic["CommissionCount"] = CommissionCount;
objDic["CommissionAmount"] = CommissionAmount;
listDic.Add(objDic);
}
}
reader.Close();
}
试试看
{
con.Open();
com.CommandText=“从edlr_comm_rep_total a中选择*,其中a.dealer_id='wb-pos00289'和a.comm_type='Activation';
//Add(“msisdn”,OracleDbType.Char).Value=msisdn;
var reader=com.ExecuteReader();
if(reader.HasRows)
{
while(reader.Read())
{
字典objDic=新字典();
string CommissionDealerId=读取器[0]。ToString();
字符串月份=读取器[1]。ToString();
字符串DealerCommissionType=读取器[2]。ToString();
string CommissionCount=读取器[3]。ToString();
string CommissionAmount=读取器[4]。ToString();
objDic[“CommissionDealerId”]=CommissionDealerId;
objDic[“月”]=月;
objDic[“DealerCommissionType”]=DealerCommissionType;
objDic[“佣金计数”]=佣金计数;
objDic[“佣金金额”]=佣金金额;
添加(objDic);
}
}
reader.Close();
}