ภายในโค้ดแอปพลิเคชัน C # ฉันต้องการสร้างและโต้ตอบกับฐานข้อมูล SQLite หนึ่งฐานขึ้นไป
ฉันจะเริ่มต้นไฟล์ฐานข้อมูล SQLite ใหม่และเปิดมันสำหรับการอ่านและการเขียนได้อย่างไร?
หลังจากการสร้างฐานข้อมูลฉันจะรันคำสั่ง DDL เพื่อสร้างตารางได้อย่างไร
ภายในโค้ดแอปพลิเคชัน C # ฉันต้องการสร้างและโต้ตอบกับฐานข้อมูล SQLite หนึ่งฐานขึ้นไป
ฉันจะเริ่มต้นไฟล์ฐานข้อมูล SQLite ใหม่และเปิดมันสำหรับการอ่านและการเขียนได้อย่างไร?
หลังจากการสร้างฐานข้อมูลฉันจะรันคำสั่ง DDL เพื่อสร้างตารางได้อย่างไร
คำตอบ:
ลิงค์ต่อไปจะนำคุณไปสู่การสอนที่ยอดเยี่ยมซึ่งช่วยฉันได้มาก!
ฉันเกือบจะใช้ทุกอย่างในบทความนั้นเพื่อสร้างฐานข้อมูล SQLite สำหรับแอปพลิเคชัน C # ของฉันเอง
อย่าลืมดาวน์โหลด SQLite.dll และเพิ่มเป็นข้อมูลอ้างอิงกับโครงการของคุณ ซึ่งสามารถทำได้โดยใช้NuGetและโดยการเพิ่ม dll ด้วยตนเอง
หลังจากที่คุณเพิ่มการอ้างอิงให้อ้างถึง dll จากรหัสของคุณโดยใช้บรรทัดต่อไปนี้ที่ด้านบนของชั้นเรียนของคุณ:
using System.Data.SQLite;
คุณสามารถค้นหา dll ของที่นี่:
คุณสามารถหาวิธี NuGet ได้ที่นี่:
ถัดไปคือสคริปต์สร้าง การสร้างไฟล์ฐานข้อมูล:
SQLiteConnection.CreateFile("MyDatabase.sqlite");
SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
m_dbConnection.Open();
string sql = "create table highscores (name varchar(20), score int)";
SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
sql = "insert into highscores (name, score) values ('Me', 9001)";
command = new SQLiteCommand(sql, m_dbConnection);
command.ExecuteNonQuery();
m_dbConnection.Close();
หลังจากที่คุณสร้างสคริปต์สร้างใน C # ฉันคิดว่าคุณอาจต้องการเพิ่มธุรกรรมย้อนกลับมันปลอดภัยมากขึ้นและจะทำให้ฐานข้อมูลของคุณล้มเหลวเนื่องจากข้อมูลจะถูกส่งไปที่ส่วนท้ายในการดำเนินการปรมาณูหนึ่งชิ้น ฐานข้อมูลและไม่ใช่ชิ้นเล็ก ๆ ซึ่งอาจล้มเหลวเมื่อวันที่ 5 ใน 10 การสืบค้น
ตัวอย่างเกี่ยวกับวิธีใช้ธุรกรรม:
using (TransactionScope tran = new TransactionScope())
{
//Insert create script here.
//Indicates that creating the SQLiteDatabase went succesfully, so the database can be committed.
tran.Complete();
}
System.Transactions.TransactionScope
ไม่ได้ทำงานตามที่คาดไว้ก็จะดำเนินการทุกทันทีและไม่ได้ทั้งหมดเข้าด้วยกันเป็นExecuteNonQuery
SQLiteTransaction
ทำไมต้องใช้TransactionScope
?
SQLiteTransaction tr = m_dbConnection.BeginTransaction(); SQLiteCommand command = new SQLiteCommand(...); command.Transaction = tr;
ใช้มากกว่าTransactionScope