我正在学习使用C#使用SQLITE的工作,并且有一个简单的情况。我想从WPF表单中检索信息,然后将其插入SQLite数据库中。该结构很简单,我之间有着一段漫长的关系,作者与作者:关系图片
和一个输入数据的简单表格:WPF表格
我要实现的是从"文章标题"文本框和"列表视图"中的每个作者插入新文章。列表框源限制为观察到汇票: 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();
}
在这里您在按钮单击事件中所做的所有操作。
您可以为所有与DB相关的操作创建数据访问层,并在此类中继承它。因此,如果您有其他表格,则可以重新使用相同的方法并将选择操作分开为不同的方法。