Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何遍历字典的字符串列表?_C#_Oracle_List_Dictionary - Fatal编程技术网

C# 如何遍历字典的字符串列表?

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>>();

我有下面的代码。我有一个返回多行的Oracle查询。我需要将数据填入dictionaries列表,但我有一个问题,那就是列表总是用重复的最后一行填充。如何使用每个Oracle行迭代列表

守则:

 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();
}