dataset与数据库

近日有需要写点C#程序,有用到Dataset数据集和SQLite数据库

 一、SQLite操作,直接贴代码,很简单:

    //创建一个数据库文件

   string datasource=Application.StartupPath + "\\test.db";

   System.Data.SQLite.SQLiteConnection.CreateFile(datasource);

   //连接数据库

   System.Data.SQLite.SQLiteConnection conn =

       new System.Data.SQLite.SQLiteConnection();

   System.Data.SQLite.SQLiteConnectionStringBuilder connstr =

       new System.Data.SQLite.SQLiteConnectionStringBuilder();

   connstr.DataSource = datasource;

   connstr.Password = "admin";//设置密码,SQLite ADO.NET实现了数据库密码保护

   conn.ConnectionString = connstr.ToString();

   conn.Open();

   //创建表

   System.Data.SQLite.SQLiteCommand cmd = new System.Data.SQLite.SQLiteCommand();

   string sql = "CREATE TABLE test(username varchar(20),password varchar(20))";

   cmd.CommandText=sql;

   cmd.Connection=conn;

   cmd.ExecuteNonQuery();

   //插入数据

   sql = "INSERT INTO test VALUES('dotnetthink','mypassword')";

   cmd.CommandText = sql;

   cmd.ExecuteNonQuery();

   //取出数据

   sql = "SELECT * FROM test";

   cmd.CommandText = sql;

   System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();

   StringBuilder sb = new StringBuilder();

   while (reader.Read())

   {

       sb.Append("username:").Append(reader.GetString(0)).Append("\n")

           .Append("password:").Append(reader.GetString(1));

   }

   MessageBox.Show(sb.ToString());

 二、利用Dataset数据集向SQLite数据库插入数据,也直接贴代码:

    DialogResult dlgResult= openFileDialog1.ShowDialog();  // 打开要导入的文件

   if (openFileDialog1.FileName == "" || dlgResult != DialogResult.OK)

       return;

   // 利用StreamReader类读取文本内容

   StreamReader sr=new StreamReader

       (File.OpenRead(openFileDialog1.FileName),System.Text.Encoding.Default);

   //连接数据库

   System.Data.SQLite.SQLiteConnection conn = new System.Data.SQLite.SQLiteConnection();

   System.Data.SQLite.SQLiteConnectionStringBuilder connstr

       = new System.Data.SQLite.SQLiteConnectionStringBuilder();

   connstr.DataSource = datasource;

   connstr.Password = "admin";//设置密码,SQLite ADO.NET实现了数据库密码保护

   conn.ConnectionString = connstr.ToString();

   conn.Open();

   //大量更新时采用事务的方式,先缓存事务,然后SQLiteDataAdapter.update后批量commit

   SQLiteTransaction ts = conn.BeginTransaction();

   string sql=" select name,number from test limit 1";

   SQLiteDataAdapter dta = new SQLiteDataAdapter(sql,conn);

   SQLiteCommandBuilder scb = new SQLiteCommandBuilder(dta);

   dta.InsertCommand=scb.GetInsertCommand();

   DataSet DS = new DataSet();

   dta.FillSchema(DS,SchemaType.Source, "Temp");    //加载表架构 注意

   dta.Fill(DS,"Temp");    //加载表数据

   DataTable DT = DS.Tables["Temp"];

   //插入数据

   while (!sr.EndOfStream)

   {

       string[] strArr = sr.ReadLine().Split(new Char[] { '\t' });

       if (strArr[0] !="" && strArr[1] !="")

       {

           DataRow DR = DT.NewRow();

           DR[0]=strArr[0];

           DR[1]=strArr[1];

           DT.Rows.Add(DR);

       }

   }

   int result=dta.Update(DT);    // 如不用BeginTransaction和Commit批量提交事务,性能会很低,350条数据20多秒

   ts.Commit();    // 提交事务

   DS.AcceptChanges();

   // 释放资源

   dta.Dispose();

   DS.Clear();

   conn.Close();

   conn.Dispose();

   sr.Close();

   sr.Dispose();

   MessageBox.Show("成功导入了: " + result.ToString() + " 行数据。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);


   

你可能感兴趣的:(dataset与数据库)