Для этого примера у меня есть база данных SQlite с таблицей Shop
. Это выглядит так:
(идентификатор на самом деле 1234567890, я исправил его после того, как изображение было снято))
Сейчас В моем коде есть класс Item
, который имеет те же свойства, что и столбцы в моей базе данных (ID, имя, цена и т. Д. c). Теперь это мой текущий код для извлечения чего-либо из моей базы данных:
public List<string> GetDBData(string SQLCommand)
{
List<string> output = new List<string>();
try
{
m_dbConnection.Open();
SQLiteDataReader sqlite_datareader;
SQLiteCommand sqlite_cmd;
sqlite_cmd = m_dbConnection.CreateCommand();
sqlite_cmd.CommandText = SQLCommand;
sqlite_datareader = sqlite_cmd.ExecuteReader();
Console.WriteLine($"Command: {SQLCommand}");
while (sqlite_datareader.Read())
{
int i = 0;
while (true)
{
try
{
string temp = "";
try
{
temp = sqlite_datareader.GetString(i).ToString();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
try
{
temp = sqlite_datareader.GetInt32(i).ToString();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
break;
}
}
output.Add(temp);
i++;
}
catch (Exception)
{
break;
}
}
}
m_dbConnection.Close();
}
catch (Exception e)
{
output = new List<string>();
output.Add("I'm sorry, I can't read from the database");
Console.WriteLine(e.Message);
m_dbConnection.Close();
}
return output;
}
Поэтому, когда мой запрос SELECT * FROM Shop WHERE ServerID = 1234567890
, я получаю этот список:
Я знаю, что метод GetDBData () - не очень хорош, но до сих пор он мне нужен только для единичных запросов, например «Выбор имени из таблицы, где ServerID = ID».
Но теперь я начинаю нуждаться в возможности создавать объекты со значениями базы данных, поэтому в конце мне нужно, чтобы список выглядел по крайней мере так:
testList Count = 1:
1: "ID:1|Name:TestItem|Price:1|Command:|RankRequired:|ServerId:1234567890"
Так что я могу преобразовать его в Предмет позже. Но, как вы можете видеть, я даже не получаю каждую запись в списке. Только первые два, пока не будет нулевого значения. Я мог бы добавить оператор if, чтобы проверить, является ли текущее поле пустым, но код уже слишком уродлив. Но я не знаю лучшего способа, чем трик-трик в трик-трик в трик-пойм.