2015-07-10 1 views
0

У меня проблема.C# MySql DataTable заполняет массив

Я хочу написать программу для вставки некоторого материала в базу данных Mysql. В первый раз я делаю для каждого столбца в базе данных собственную строку и использовал это для создания SQL-запроса. Но в большинстве таблиц я получил более 100 столбцов. И я не хочу делать 100 переменных. Поэтому я решил сделать это с помощью данных и массива. Но теперь я не знаю, как заполнить имена столбцов в массиве. Вот часть кода, который это делает.

 private void button_npccreate_click(object sender, EventArgs e) 
    { 
     //Umwandlung von C# Variable in Mysql Variable 
     MySqlCommand command = new MySqlCommand(); 
     command.Parameters.AddWithValue("@server", server); 
     command.Parameters.AddWithValue("@port", port); 
     command.Parameters.AddWithValue("@user", user); 
     command.Parameters.AddWithValue("@password", mysqlpassword); 
     command.Parameters.AddWithValue("@world", db_world); 


     //Connection zu Mysql Server 
     string myConnectionString = "Server=" + server + ";Port=" + port + ";Database=" + db_world + ";Uid=" + user + ";Pwd=" + mysqlpassword + ";"; 
     MySqlConnection connection = new MySqlConnection(myConnectionString); 
     MySqlCommand cmd; 
     cmd = connection.CreateCommand(); 
     string readquery = "SELECT * FROM quest_template;"; 
     MySqlDataAdapter read_adapter = new MySqlDataAdapter(readquery, connection); 
     DataTable tableRead = new DataTable(); 
     connection.Open(); 
     read_adapter.Fill(tableRead); 
     connection.Close(); 
     int columns = 0; 


     if(tableRead.Rows.Count > 0) 
     { 
     foreach(DataColumn dc in tableRead.Columns) 
     { 
      columns++; 
     } 
     } 
     else 
     { 
      MessageBox.Show("The table is empty. Please check your Database."); 
     } 

     string [] columns_array = new string[columns]; 
     foreach (DataColumn dc in tableRead.Columns) 
     { 
// Here i must fill the Array i think. But i dont know how to do      this. 
     } 

    } 
+0

Если вы используете метод Fill для заполнения DataTable, а затем работать с этим DataTable вместо работы с массивом. Таблицы данных намного мощнее. Если вы все еще хотите использовать массивы, вам нужно создать массив с размером набора результатов для строк и столько же размеров, сколько и в datatable. Также в вашем коде вам нужен вложенный цикл. Один для строк и один для столбцов. – NoChance

ответ

0

Вы должны принять во внимание Emmad Карима замечания.

Проблема с вашей целью состоит в том, что столбцы могут содержать значения разных типов. Поэтому вы не можете собрать все ячейки в двумерном массиве (одно измерение для столбцов, одно для строки). Например, в коде ниже, если вы хотите объединить col0Array и col1array в одном 2-мерном массиве, вам нужно объявить этот массив как «object [,]», что дает отсутствие преимущества по сравнению с DataTable.

int [] Col0Array = new int [tableRead.Rows.Count] ; // first Column type is int 
string[] Col1Array = new string[tableRead.Rows.Count] ; // second Column type is string 
for (int i=0;tableRead.Rows.Count;i++) 
{ 
    Col0Array[i]=(int )tableRead.Rows[i][0] ; 
    Col1Array[i]=(string)tableRead.Rows[i][1] ; 
}