Я учусь работать с SQLite с использованием C # и имею простой пример.Я хочу получить информацию из формы WPF и вставить ее в базу данных SQLite.Структура довольно проста. У меня есть одно отношение «многие ко многим» между автором и статьей: Изображение отношения
И простая форма для ввода данных: Форма WPF
Чего я хочу добиться, так это вставить новую статью из текстового поля «Заголовок статьи», а каждого автора - из «Представления списка».Источник списка формы привязан к ObservableCollection: ObservableCollection<string> authorList = new ObservableCollection<string>();
Используя некоторые основные руководства в Интернете, я написал следующий код, теперь код работает нормально и выполняет то, что мне нужно.Но так как я все еще неопытен, я задаюсь вопросом, является ли такой способ ведения дел достойным.Если нет, я хотел бы дать несколько советов о том, что нужно изменить и как улучшить код.
private void Button_Click(object sender, RoutedEventArgs e)
{
string insertQuery;
SQLiteCommand sqlCommand;
//Variable to store last inserted article id and list for author ids
long lastArtID;
List<long> authorIDArray = new List<long>();
//Query to insert new Article into tblArticle
insertQuery = "INSERT INTO tblArticle (Title, PersonalComment, File) VALUES (@Name, @PersonalComment, @File)";
sqlCommand = new SQLiteCommand(insertQuery, NikasDB.myConnection);
NikasDB.OpenConnection();
//Add parameters from the window_textboxes
sqlCommand.Parameters.AddWithValue("@Name", txbTitle.Text);
sqlCommand.Parameters.AddWithValue("@PersonalComment", txbPersonalComment.Text);
sqlCommand.Parameters.AddWithValue("@File", txbFileName.Text);
sqlCommand.ExecuteNonQuery();
//Retrieve newly added article id
lastArtID = NikasDB.myConnection.LastInsertRowId;
string selectQuery;
SQLiteDataReader GetResult;
//For each author in authorList check if author already exists
//If it exists retrieve its id and store in authorIDArray
//else first insert the author and then retrieve id
foreach (var author in authorList)
{
selectQuery = "SELECT ID FROM tblAuthor WHERE Name=@Name";
sqlCommand = new SQLiteCommand(selectQuery, NikasDB.myConnection);
sqlCommand.Parameters.AddWithValue("@Name", author);
GetResult = sqlCommand.ExecuteReader();
if (GetResult.HasRows)
{
if (GetResult.Read())
{
authorIDArray.Add(GetResult.GetInt32(0));
}
}
else
{
insertQuery = "INSERT INTO tblAuthor (Name) VALUES (@Name)";
sqlCommand = new SQLiteCommand(insertQuery, NikasDB.myConnection);
sqlCommand.Parameters.AddWithValue("@Name", author);
sqlCommand.ExecuteNonQuery();
authorIDArray.Add(NikasDB.myConnection.LastInsertRowId);
}
}
//Foreach author Id insert ArticleID and AuthorID from list in joint table for many-to-many relationship
foreach (var authorID in authorIDArray)
{
insertQuery = "INSERT into jntArticleAuthor (Article_ID, Author_ID) VALUES (@ArticleID, @AuthorID)";
sqlCommand = new SQLiteCommand(insertQuery, NikasDB.myConnection);
sqlCommand.Parameters.AddWithValue("@ArticleID", lastArtID);
sqlCommand.Parameters.AddWithValue("@AuthorID", authorID);
sqlCommand.ExecuteNonQuery();
}
NikasDB.CloseConnection();
authorIDArray.Clear();
authorList.Clear();
}