2016-03-25 29 views
-1

MySQL Veritabanıma bağlandım ve kodumda doğrudan bir komut yazarak çıktı aldım, ancak çalışma sırasında özellikle sormak istediğiniz komutun sorulduğu bir özellik eklemek istiyorum. Ardından, çalışma zamanı sorgusunda belirtilen tüm verileri almak ve almak için her birinin yapmasını istiyorum. Bu benim kodum ATM ve hatalarım var.Foreach MySql Tablo

try 
     { 
      con.Open(); 
      Console.WriteLine("Connection Open!"); 

      Console.WriteLine("Enter Query:"); 
      comString = Console.ReadLine(); 

      try 
      { 
       MySqlDataReader myReader = null; 
       MySqlCommand myCommand = new MySqlCommand(comString, con); 
       myReader = myCommand.ExecuteReader(); 
       while (myReader.Read()) 
       { 
        //Console.WriteLine(myReader["ID"].ToString() + " | " + myReader["NAME"].ToString() + " | " + myReader["PERMISSIONS"].ToString()); 
        foreach (string i in myReader) 
        { 
         Console.WriteLine(myReader["i"].ToString()); 
        } 
       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 

DÜZENLEME

Bu şimdiye C sqlConnection.Program.Main de

System.InvalidCastException: Unable to cast object of type 'System.Data.Common.DataRecordInternal' to type 'System.String'. 

(String [] args) altına almak hatadır: \ Pathssss \ sqlConnection \ sqlConnection \ Program. cs: line 50

+0

bu hataları paylaşın. – Christoph

cevap

1

Bu, foreach deyiminde object ifadesini string ürününe göndermeye çalıştığınız içindir. while bloğunu değiştirmek için bu kodu kullanın.

int count = myReader.FieldCount; 
while(myReader .Read()) 
{ 
    for(int i = 0 ; i < count ; i++) 
    { 
     Console.WriteLine(myReader.GetValue(i)); 
    } 
} 
+0

sen benim arkadaşım saf bir dahi! –

0

Eğer hayatınızı çok kolaylaştıracak ben Dapper kullanarak öneririm kütüphaneleri, kullanma olanağı varsa. dapper yapmanız gereken tüm Java ile

şudur:

bool firstRun = true; 
foreach(var result in con.Query(comString)) 
{ 
    var rDictionary = (IDictionary<string,object>)result; 

    //assuming this is what you want based off of your commented out code 
    if(firstRun){ 
     firstRun = false; 
     Console.Write(string.Join("|",rDictionary.Keys)); 
    } 

    Console.WriteLine( 
      string.Join("|", rDictionary.Select(a=>a.Value ?? (object)"NULL").ToArray()) 
    ); 
} 
0

Sana bunu yapmanın başka (daha iyi düşünmek) yol önermek istiyorum:

try 
    { 
     con.Open(); 
     Console.WriteLine("Connection Open!"); 

     Console.WriteLine("Enter Query:"); 
     comString = Console.ReadLine(); 
     MySqlCommand myCommand = new MySqlCommand(comString, con); 
     MySqlDataAdapter msda = new MySqlDataAdapter(myCommand); 
     DataSet ds = new DataSet(); 
     msda.Fill(ds); 
     foreach (DataRow dr in ds.Tables[0].Rows) 
      Console.WriteLine(dr["column"].ToString()); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
    finally 
    { 
     con.Close(); 
    }