我是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数据丢失外部循环
答案 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]);