我正在学习使用C#使用SQLite的情况,并且有一个简单的案例。我想从WPF表单中检索信息并将其插入SQLite数据库。结构非常简单,我在文章和作者之间有一种多对多的关系: Relationship picture
和一个简单的表格来输入数据: WPF form
我想要实现的是从“文章标题”文本框中插入新文章,并从“列表视图”中插入每个作者。表单列表框源绑定到ObservableCollection:
ObservableCollection<string> authorList = new ObservableCollection<string>();
使用Internet上的一些基本指南,我编写了以下代码,现在代码可以正常工作,并且可以完成我需要做的事情。但是由于我仍然没有经验,所以我想知道这种做事方式是否是一种体面的方式。如果没有,我想要一些有关更改内容以及如何改进代码的提示。
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();
}
答案 0 :(得分:0)
这是您在按钮单击事件中执行的所有操作。
您可以为所有与数据库相关的操作创建数据访问层,并在此类中继承它。因此,如果您使用其他表格,则可以重新使用相同的方法 并将插入选择操作分别插入不同的方法。