5. 建立相关类文件 Class
在 VS 菜单, 点 Project -> Add Class, 给个名字 Book.cs , 点 Add, 然后输入对 Book类 的定义:
public class Book
{
private int id;
private string bookName;
private decimal price;
private string rowguid;
public int ID
{
get { return id; }
set { id = value; }
}
public string BookName
{
get { return bookName; }
set { bookName = value; }
}
public decimal Price
{
get { return price; }
set { price = value; }
}
public string Rowguid
{
get { return rowguid; }
set { rowguid = value; }
}
public Book()
{ }
public Book(int _id, string _bookname, decimal _price, string _rowguid)
{
id = _id;
bookName = _bookname;
price = _price;
rowguid = _rowguid;
}
}
保存。
类似步骤,输入 数据库操作类: BookDAL.cs
public class BookDAL
{
public static bool CreateBook(Book book)
{
try
{
SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;");
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "INSERT INTO Book(ID, BookName, Price, Rowguid) VALUES(@ID1, @BookName1, @Price1, @Rowguid1)";
cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));
int i = cmd.ExecuteNonQuery();
return i == 1;
}
catch (SQLiteException se)
{
MessageBox.Show(se.Message + " \n\n" + se.Source + "\n\n" + se.StackTrace + "\n\n" + se.Data);
return false;
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace + "\n\n" + ae.Data);
return false;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
MessageBox.Show(ex.Message + "\n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n" + ex.Data);
return false;
}
}
public static bool UpdateBookByID(Book book)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
{
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "update Book set BookName=@BookName1,Price=@Price1, Rowguid=@Rowguid1 where ID=@ID1;";
cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));
int i = cmd.ExecuteNonQuery();
return i == 1;
}
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
return false;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
MessageBox.Show(ex.Message);
return false;
}
}
public static bool UpdateBookByGuid(Book book)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
{
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "update Book set ID=@ID1,BookName=@BookName1,Price=@Price1 where Rowguid=@Rowguid1;";
cmd.Parameters.Add(new SQLiteParameter("ID1", book.ID));
cmd.Parameters.Add(new SQLiteParameter("BookName1", book.BookName));
cmd.Parameters.Add(new SQLiteParameter("Price1", book.Price));
cmd.Parameters.Add(new SQLiteParameter("Rowguid1", book.Rowguid));
int i = cmd.ExecuteNonQuery();
return i == 1;
}
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
return false;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
MessageBox.Show(ex.Message);
return false;
}
}
public static bool DeleteBook(int ID)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
{
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "delete from Book where ID=@ID;";
cmd.Parameters.Add(new SQLiteParameter("ID", ID));
int i = cmd.ExecuteNonQuery();
return i == 1;
}
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
return false;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
MessageBox.Show(ex.Message);
return false;
}
}
public static Book GetBookByID(int ID)
{
try
{
using (SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;"))
{
conn.Open();
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = "select * from Book where ID=@ID;";
cmd.Parameters.Add(new SQLiteParameter("ID", ID));
SQLiteDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
Book book = new Book();
book.ID = dr.GetInt32(0);
book.BookName = dr.GetString(1);
book.Price = dr.GetDecimal(2);
return book;
}
else
return null;
}
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace);
return null;
}
catch (Exception ex)
{
//Do any logging operation here if necessary
throw new Exception(ex.Message);
}
}
public static DataTable GetAllBook()
{
DataTable dt = new DataTable();
try
{
SQLiteConnection conn = new SQLiteConnection("Data Source=db/Books.sqlite;");
conn.Open();
SQLiteCommand cmd = new SQLiteCommand(conn);
cmd.CommandText = "SELECT * FROM Book";
cmd.CommandType = CommandType.Text;
//Console.WriteLine(cmd.CommandText);
SQLiteDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
dt.Load(dr);
}
else {
//throw new NullReferenceException("No Record Available.");
}
dr.Close();
conn.Close();
}
catch (ArgumentException ae)
{
MessageBox.Show(ae.Message + " \n\n" + ae.Source + "\n\n" + ae.StackTrace + "\n\n" + ae.Data);
}
catch (Exception ex)
{
//throw new Exception(ex.Message);
MessageBox.Show(ex.Message + " \n\n" + ex.Source + "\n\n" + ex.StackTrace + "\n\n" + ex.Data);
}
return dt;
}
}
在数据库操作类,因为涉及数据库的操作,要在 using 部分,必须加入 using System.Data. SQLite 的引用等语句。
using System.Data;
using System.Data.SQLite;
using System.Windows.Forms;
注意了:
初学者都喜欢用别人的代码来做练习,拷贝过来,粘贴上去,可减少敲键盘的时间。但是,在网页上拷贝代码,然后贴到 VS里,会引起很多问题。例如 html 的控制符,空格等等,导致以后程序运行出错,而且不知道错误在哪里。明明在屏幕上看到人家的代码 与 你的代码是一样的,但就是出错。这个时候,就要仔细看看控制符和代码的问题。
要减少这类问题,在网页拷贝的代码, 先粘贴到一个纯文本的编辑器,例如 Notepad++ , 然后从 Notepad++ 选择和复制, 再粘贴到 VS 。
对于粘贴过来的代码,要特别注意其空格。例如, 下面这个就是从粘贴后的代码: