2014-10-17 27 views
-3

我的C#代码有问题,我无法解决问题。所以,我的问题我尝试登录时遇到异常。没有任何固定的元素对象。代码中的问题在哪里?例外情况:该指数超出允许范围。为什么?

该指数超出允许范围。参数:指数

代码:

public dbresult.GetSome Get(Oneword.dbcon conn, string tablename) { 
     string constring = "Server=" + conn.Host + ";Database=" + conn.Database + ";Uid=" + conn.Username + ";Pwd=" + conn.Password; 
     int i,im=0; 

     Oneword.dbresult.GetSome result = new dbresult.GetSome(); 
     MySqlConnection connection = new MySqlConnection(constring); 

     connection.Open(); 

     try { 
      MySqlDataReader oszlopok_cmd = null; 
      MySqlDataReader sorok_cmd = null; 

      DataTable oszlopok = null; 

      MySqlCommand cmd = connection.CreateCommand(); 

      cmd.CommandText = "SELECT * FROM "+tablename; 

      // Oszlopok lekérése 
      oszlopok_cmd = cmd.ExecuteReader(CommandBehavior.SchemaOnly); 
      oszlopok = oszlopok_cmd.GetSchemaTable(); 
      oszlopok_cmd.Close(); 

      List<string> columns = new List<string>(); 
      foreach (DataRow col in oszlopok.Rows) { 
       columns.Add(col.Field<String>("ColumnName")); 
      } 

      // Sorok lekérése, és tárak feltöltése 
      sorok_cmd = cmd.ExecuteReader(); 

      while (sorok_cmd.Read()) { 
       i = result.AddNewDir(); 

       foreach (string clomone in columns) { 
        result.AddKeyValue(i, clomone, sorok_cmd.GetString(im)); 
        im++; 
       } 
      } 
     } 
     finally { 
      connection.Close(); 
     } 

     return result; 
    } 

public class dbresult { 
    public class GetSome { 
     private List<Dictionary<string, string>> dirlistem = new List<Dictionary<string, string>>(); 
     private int cuID = 0; 

     public void AddKeyValue(int dirID, string key, string value){ 
      dirlistem[dirID][key] = value; 
     } 
     public int AddNewDir() { 
      Dictionary<string,string> added = new Dictionary<string,string>(); 
      cuID++; 
      return cuID - 1; 
     } 
     public Dictionary<string, string> GetDir(int dirID) { 
      return dirlistem[dirID]; 
     } 
     public void ModifyValue(int dirID, string key, string value) { 
      dirlistem[dirID][key] = value; 
     } 

    } 
} 
+3

指定引发异常的行可能会非常有用......但是您是否尝试过调试并查看该行上发生了什么?听起来就像你试图找到那些不存在的东西。 – crashmstr 2014-10-17 20:01:44

+0

我会认为这是排列的对象。你需要找到问题所在的线路。例外会告诉你。然后,您可以告诉我们是什么对象导致错误,或者自己调试以找出错误发生的原因。 – deathismyfriend 2014-10-17 20:02:44

+0

connection.Close();或者当我插入catch {throw;投掷; – mbalint987 2014-10-17 20:03:23

回答

2

您不添加创建词典列出:

public int AddNewDir() { 
    Dictionary<string,string> added = new Dictionary<string,string>(); 
    // *** 
    dirlistem.Add(added); 
    // *** 
    cuID++; 
    return cuID - 1; 
} 

因此,在这里你有dirlistem[dirID]任何地方将抛出一个异常。

此外,您不需要cuID成员在GetSome类。只需

return dirlistem.Count - 1; 

AddNewDir