經過一番混亂之後,我發現了一些可行的東西。我使用的是類叫做DatabaseResults來保存結果:
public class DatabaseResults
{
public List<string> ColumnNames { get; set; }
public List<List<string>> Rows { get; set; }
public DatabaseResults()
{
ColumnNames = new List<string>();
Rows = new List<List<string>>();
}
}
方法,然後去和運行查詢,抓住了標題,並把他們的結果對象。然後它讀取行,獲取列值的字符串。 「查詢」是傳入的字符串。它是「選擇」查詢,缺少選擇位。
DatabaseResults results = new DatabaseResults();
string full_query = "SELECT " + query;
DbConnection connection = DB.DB().Connection;
connection.Open();
var command = connection.CreateCommand();
command.CommandText = full_query;
try
{
using (var reader = command.ExecuteReader())
{
for (int i = 0; i < reader.FieldCount; i++)
{
results.ColumnNames.Add(reader.GetName(i));
}
while (reader.Read())
{
List<string> this_res = new List<string>();
for (int i = 0; i < reader.FieldCount; ++i)
{
this_res.Add(reader[i].ToString());
}
results.Rows.Add(this_res);
}
}
}
catch (Exception ex)
{
results.ColumnNames.Add("Error");
List<string> this_error = new List<string>();
this_error.Add(ex.Message);
results.Rows.Add(this_error);
}
finally
{
connection.Close();
}
我不能銷燬連接,因爲它是由系統db對象使用的,所以我需要打開並關閉它。 try/catch /終於可以確保發生這種情況。
你的select語句是怎樣的! –
Nikita,select語句將在運行時生成,所以它可能是任何東西。唯一的限制是它將以「select」開頭,並且只有一個命令(所以沒有選擇後跟一個插入鏈接) –