06
Aug.2008


作者:Aleaf       

目的是研究飞信聊天记录文件(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)

推荐(0)
收藏

发表评论: