在C#中如何获取while循环结果在循环外作为String []数组

时间:2016-01-23 07:58:11

标签: c# arrays sqlite while-loop

我是C#的新手,我使用 FiniSar.SQLite 连接我的 database.db 。我可以很容易地在循环中得到我的while循环结果。

但我希望将所有结果外部循环作为 String []数组进行访问。我已经和你分享了我的代码,我真的很感激,如果有人为我分享了好的答案。

档案>>的 Form1.cs的

private void buttonStem_Click(object sender, EventArgs e)
{
    SQLiteConnection sqlite_conn;
    SQLiteCommand sqlite_cmd;
    SQLiteDataReader sqlite_datareader;

    sqlite_conn = new SQLiteConnection("Data Source=database.db;Version=3;New=False;Compress=True;");
    sqlite_conn.Open();
    sqlite_cmd = sqlite_conn.CreateCommand();

    sqlite_cmd.CommandText = "SELECT * FROM GList";
    sqlite_datareader = sqlite_cmd.ExecuteReader();

    string[] gList;

    while ( sqlite_datareader.Read() )
    {

         gList = sqlite_datareader.GetString(1);
    }

    gList = // { "cat", "dog", "horse" };  << " I want results OutSide Loop something like that "

    sqlite_conn.Close();
}

gList数据丢失外部循环

2 个答案:

答案 0 :(得分:3)

C#数组具有固定大小,因此使用列表会更容易:

List<string> list = new List<string>();
while (datareader.Read()) {
    list.Add(datareader.GetString(1));
}

如果你真的需要一个数组,你可以在之后进行转换:

string[] gList = list.ToArray();

答案 1 :(得分:2)

应该使用要放入该数组的元素数量初始化数组,然后每个元素都可以插入到数组中的实际位置,从零到数组的长度减去1.所以你的代码,假设您从数据库中检索三个元素应该是这样的

string[] gList = new string[3];
int i = 0;
while ( sqlite_datareader.Read() )
{

     gList[i] = sqlite_datareader.GetString(1);
     i++;
}

正如您所看到的,这是完全不可行的,因为很难事先知道您从数据库中检索了多少元素(并且您绝不应该以这种方式限制代码)。因此需要一个更好的工具。这是通用集合List<T>

List<string> gList = new List<string>();
while ( sqlite_datareader.Read() )
     gList.Add(sqlite_datareader.GetString(1));

List<T>添加元素没有问题,并且具有许多其他功能,使其优于裸骨阵列。而且,无论如何,你可以用这种方式将它用作数组

foreach(string s in gList)
  Console.WriteLine(s);

for(int x = 0; x < gList.Count - 1; x++)
   Console.WriteLine(gList[x]);