2014-09-03 37 views
0

在這裏使用C#和MySQL(Visual Studio 12和MySQL工作臺6.1)。獲取整個表 - MySQL錯誤

我想將整個表格放入列表中。

這是我到目前爲止有:

List<Object> arrList = new List<Object>(); 

string str = @"server=localhost;database=test;userid=root;password=asd;"; 


MySqlConnection con = new MySqlConnection(str); 
con.Open(); 


MySqlCommand cmd = new MySqlCommand(query, con); 

cmd.CommandText = query; 
MySqlDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    arrList.Add(reader["* "]); 
} 

當我通過SELECT * FROM emp;query,並得到arrList的toString,我得到一個indexOutOfBounds例外。 (我的表格emp有1記錄在裏面。)

謝謝!

編輯:我試圖讓整個表(按順序)成列表。這是正確的方法嗎?

編輯2:如果我們不知道表中的列數,該怎麼辦?

+0

你的'emp'表有多少列?只有一個? – 2014-09-03 06:17:30

+0

2欄。我想順序去。像[row1,col1]然後[row1,col2]然後[row2,col1]然後[row2,col2]等等...**編輯**我希望它以上述方式適用於任何表格。所以我們不知道有多少個田地。 – john 2014-09-03 06:18:50

+0

這些列的類型是什麼? – 2014-09-03 06:21:37

回答

1

更改爲:

while (reader.Read()) 
{ 
    arrList.Add(reader["myColumnTitle"].ToString()); 
} 

原因"* "不是VALIS列名。替代可以使用索引

arrList.Add(reader[0].ToString()); 

每個柱:

列表arrList =新列表();

string str = @"server=localhost;database=test;userid=root;password=asd;"; 
string query = "SELECT * FROM emp"; 

MySqlConnection con = new MySqlConnection(str); 
con.Open(); 


MySqlCommand cmd = new MySqlCommand(query, con); 

cmd.CommandText = query; 
MySqlDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    for (int i = 0; i < reader.FieldCount; i++) 
    { 
     var value = reader[i]; 
     arrList.Add(Convert.ToString(value)) 
    } 
} 
+0

使用此方法是否無法將整個表(按順序)獲取到列表中? (不只是1個字段) – john 2014-09-03 06:15:29

+0

字符串中的所有數據? - >從emp中選擇Column1 + Column2 ...關於數據類型的Carfull。他們必須是相同的! – 2014-09-03 06:18:12

+0

如果列數不知道怎麼辦? – john 2014-09-03 06:20:13

1

reader.Read()通過行讀取你的結果行。這意味着在這段while語句中,您需要閱讀查詢的所有列。

當您編寫"* "時,您的閱讀器會查找您沒有的名爲*的列。 MySqlDataReader不能理解爲您可以在SQL查詢中編寫*時讀取所有列。

這應該工作。

while (reader.Read()) 
{ 
    arrList.Add((string)reader[0]); 
    arrList.Add((string)reader[1]); 
} 

如果你真的不知道有多少個字段,你MySqlDataReader有,你可以使用SqlDataReader.FieldCount property

獲取當前行中的列數。

所以你的代碼可以像;

while (reader.Read()) 
{ 
    for(int i = 0; i < reader.FieldCount; i++) 
    { 
     arrList.Add((string)reader[i]); 
    } 
} 

還使用using statement來處置您的數據庫連接和對象;

using(MySqlConnection con = new MySqlConnection(str)) 
using(MySqlCommand cmd = con.CreateCommand()) 
{ 
    ... 
    ... 
    using(MySqlDataReader reader = cmd.ExecuteReader()) 
    { 
     while (reader.Read()) 
     { 
     for(int i = 0; i < reader.FieldCount; i++) 
     { 
      arrList.Add((string)reader[i]); 
     } 
     } 
    } 
}