目的是研究飞信聊天记录文件(SQLite数据库)的操作,顺便学习一下SQLite知识.
以下是摘自某网站文章的部分代码,可以看出SQLite数据库的一般操作和该数据库的大致结构关系:
string connString = "Data Source={0};Version=3;Password={1};";
SQLiteConnection conn = null;
SQLiteConnection connHis = null;
string USERPROFILE = "";
string folderURL=string.Empty;
private void btImport_Click(object sender, EventArgs e)
{
folderURL = USERPROFILE + @"\Application Data\Fetion\" + txtFetionId.Text; try
{
conn = new SQLiteConnection(string.Format(connString, folderURL + "\\history.dat", txtFetionId.Text));
connHis = new SQLiteConnection(string.Format(connString,txtImpPath.Text, txtFetionId.Text)); SQLiteDataAdapter sda = new SQLiteDataAdapter();
DataSet ds = new DataSet();
connHis.Open();
sda.SelectCommand = new SQLiteCommand("select * from Player", connHis);
sda.Fill(ds, "Player");
sda.SelectCommand = new SQLiteCommand("select * from Message", connHis);
sda.Fill(ds, "Message");
sda.SelectCommand = new SQLiteCommand("select * from MessageBody", connHis);
sda.Fill(ds, "MessageBody");
sda.Dispose();
connHis.Close();
conn.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.Connection = conn;
DbTransaction dt = conn.BeginTransaction();
//向表内插入数据
for (int n = 0; n < ds.Tables["
MessageBody"].Rows.Count; n++)
{
DataRow dr = ds.Tables["MessageBody"].Rows[n];
cmd.CommandText = "INSERT OR IGNORE INTO [MessageBody] ([ID], [SenderUri], [SenderName], [Body], [Extend], [MessageType], [Time]) VALUES ($ID, $SenderUri, $SenderName, $Body, $Extend, $MessageType, $Time)";
cmd.Parameters.Add("$ID", DbType.String).Value = dr[0].ToString();
cmd.Parameters.Add("$SenderUri", DbType.String).Value = dr[1].ToString();
cmd.Parameters.Add("$SenderName", DbType.String).Value = dr[2].ToString();
cmd.Parameters.Add("$Body", DbType.String).Value = dr[3].ToString();
cmd.Parameters.Add("$Extend", DbType.String).Value = dr[4].ToString();
cmd.Parameters.Add("$MessageType", DbType.Int32).Value = int.Parse(dr[5].ToString());
cmd.Parameters.Add("$Time", DbType.Time).Value = DateTime.Parse( dr[6].ToString());
cmd.ExecuteNonQuery();
} for (int n = 0; n < ds.Tables["Message"].Rows.Count; n++)
{
DataRow dr = ds.Tables["Message"].Rows[n];
cmd.CommandText = "INSERT OR IGNORE INTO [Message] ([MessageID], [ReceiverUri], [ReceiverName], [Status]) VALUES ($MessageID, $ReceiverUri, $ReceiverName, $Status)";
cmd.Parameters.Add("$MessageID", DbType.String).Value = dr[0].ToString();
cmd.Parameters.Add("$ReceiverUri", DbType.String).Value = dr[1].ToString();
cmd.Parameters.Add("$ReceiverName", DbType.String).Value = dr[2].ToString();
cmd.Parameters.Add("$Status", DbType.Int32).Value = int.Parse(dr[3].ToString());
// Console.WriteLine(cmd.CommandText);
cmd.ExecuteNonQuery();
} for (int n = 0; n < ds.Tables["
Player"].Rows.Count; n++)
{
DataRow dr = ds.Tables["Player"].Rows[n];
cmd.CommandText = "INSERT OR IGNORE INTO [Player] ([Uri], [Name], [Type]) VALUES ($Uri, $Name, $Type)";
cmd.Parameters.Add("$Uri", DbType.String).Value = dr[0].ToString();
cmd.Parameters.Add("$Name", DbType.String).Value = dr[1].ToString();
cmd.Parameters.Add("$Type", DbType.Int32).Value = int.Parse(dr[2].ToString());
// Console.WriteLine(cmd.CommandText);
cmd.ExecuteNonQuery();
} dt.Commit();
conn.Close();
rtbLog.Text += "记录导入成功!\n"; }
catch (Exception ex)
{
rtbLog.Text += ex.Message + ‘\n‘;
//throw;
}
}
(本文代码来源:http://www.dotnetthink.com)