C#对Sqllite操作

前言

数据库的操作也是程序设计中的家常便饭了,关系型数据库中Sqlite3是非常轻量级别的,所以这个数据在小型应用程序的设计中占用很高的比重。当然我这里描述的是1.0版本,也是最原始的方案,大型应用开发中一般选择EF进行桥接,当然我认为其低层逻辑是一致,只是由它帮忙写好了调用的逻辑。

一、连接对象

SQLiteConnection,DbConnection 的 SQLite 实现,位于模块System.Data.SQLite.dll中。重要属性是connectionString,指向需要操作的数据库文件名。具有丰富的事件,可以在需要时进行关联,处理一些业务逻辑。

主要方法,Open打开,Close关闭,但都是没有返回值的,失败是直接出抛出异常,需要开发者自己捕获后处理。

二、命令对象

SQLiteCommand,DbCommand的Sqlite实现。重要属性CommandText,此命令所基于的命令文本,Connection属性关联连接对象。重要方法:ExecuteNonQuery,执行该命令并返回受其影响的插入/更新的行数; ExecuteScalar,执行该命令并返回结果集第一行的第一列(如果存在),如果未返回结果集,则返回 null。

三、命令参数对象

SQLiteParameter,DbParameter 的 SQLite 实现。主要在Sql命令字符串中添加对应占位信息。

cs 复制代码
 cmdText = "insert t_PlaneData(sn,f_ID,f_Flatness,f_Var_dis,f_Min_dis,f_Max_dis,f_Avg_dis,f_Result)" +
        " value(@sn,@f_ID,@f_Flatness,@f_Var_dis,@f_Min_dis,@f_Max_dis,@f_Avg_dis,@f_Result)";
 parameters = new MySqlParameter[]
 {
         new MySqlParameter("@sn","163748595jhfkk"),
         new MySqlParameter("@f_ID","1823-11"),
         new MySqlParameter("@f_Flatness","NG"),
         new MySqlParameter("@f_Var_dis","163748595jhfkk"),
         new MySqlParameter("@f_Min_dis","1823-11"),
         new MySqlParameter("@f_Max_dis","NG"),
         new MySqlParameter("@f_Avg_dis","163748595jhfkk"),
         new MySqlParameter("@f_Result","1823-11")
 };

四、几种数据库查找方式

1、执行命令无返回值

cs 复制代码
  //执行命令无返回值
  private static int ExecuteNonQuery(string commandText, params MySqlParameter[] commandParameters)
  {
      conn.Open();

      MySqlCommand command = new MySqlCommand();
      command.Connection = conn;
      command.CommandText = commandText;
      if (commandParameters != null)
          command.Parameters.AddRange(commandParameters);
      int val = command.ExecuteNonQuery();

      command.Dispose();
      conn.Close();

      return val;
  }

2、查询并返回Datatbale

cs 复制代码
// 查询并返回datatable
private static DataTable ExecuteDataTable(string commandText, params MySqlParameter[] commandParameters)
{
    conn.Open();

    MySqlCommand command = new MySqlCommand();
    command.Connection = conn;
    command.CommandText = commandText;
    if (commandParameters != null)
        command.Parameters.AddRange(commandParameters);
    // 开始读取
    MySqlDataAdapter adapter = new MySqlDataAdapter(command);
    DataTable data = new DataTable();
    adapter.Fill(data);
    // dispose
    adapter.Dispose();
    command.Dispose();
    conn.Close();

    return data;
}

五、调用示例

1、创建表单

cs 复制代码
        //创建表单
        public void CreateProduct()
        {
            string str = "create table if not exists t_Product(" +
                        "SN varchar(60) primary key," +
                        "Type char(10) not null," +
                        "DateTime timestamp default current_timestamp()," +
                        "State char(2));";
            CreateTable(str);
        }

3、2、插入数据

cs 复制代码
 //增加数据
 public void InsertProductInfo()
 {
     string str = "insert t_Product(SN,Type,State) value(@SN,@Type,@State)";
     Random random = new Random();  //放循环体外初始化
     int temp = random.Next(1, 100000);
     string sn = DateTime.Now.ToLongTimeString();
     MySqlParameter[] parameters = new MySqlParameter[]
     {
         new MySqlParameter("@SN",temp+sn),
         new MySqlParameter("@Type","1823-11"),
         new MySqlParameter("@State","NG")
     };
     ExecuteNonQuery(str, parameters);
 }

3、事务方式插入多条数据

cs 复制代码
  /// <summary>
  /// 执行多条SQL语句,实现数据库事务。
  /// </summary>mysql数据库
  public void ExecuteSqlTran()
  {
      conn.Open();
      MySqlCommand cmd = new MySqlCommand();
      cmd.Connection = conn;
      MySqlTransaction tx = conn.BeginTransaction();
      cmd.Transaction = tx;
      try
      {
          string cmdText;//sql语句
          MySqlParameter[] parameters;//相应参数

          //1、插入信息概要
          GetSqlAbs(out cmdText, out parameters);

          //封装对象
          cmd.CommandText = cmdText;
          cmd.Parameters.AddRange(parameters);
          //执行命令
          cmd.ExecuteNonQuery();
          cmd.Parameters.Clear();

          //2、插入检测表1数据
          GetSqlAper(out cmdText, out parameters);
          cmd.CommandText = cmdText;
          cmd.Parameters.AddRange(parameters);
          cmd.ExecuteNonQuery();
          cmd.Parameters.Clear();

          //3、插入检测表2数据

          GetSqlPlan(out cmdText, out parameters);
          cmd.CommandText = cmdText;
          cmd.Parameters.AddRange(parameters);
          cmd.ExecuteNonQuery();
          cmd.Parameters.Clear();

          //4、插入检测表3数据
          GetSqlProfile(out cmdText, out parameters);
          cmd.CommandText = cmdText;
          cmd.Parameters.AddRange(parameters);
          cmd.ExecuteNonQuery();
          cmd.Parameters.Clear();

          tx.Commit();//提交
      }
      catch (MySqlException E)
      {
          tx.Rollback();
          throw new Exception(E.Message);
      }
  }

六、完整帮助类

cs 复制代码
  class SqlHelp
  {
      private SqlHelp() { }
      public static string ConnectionString= ConfigurationManager.AppSettings["SQLite"].ToString();
      private static SQLiteConnection conn = new SQLiteConnection(ConnectionString);
      



      public static int CreateTable(string commandText)
      {
          conn.Open();
          SQLiteCommand cmd = new SQLiteCommand();
          cmd.Connection = conn;
          cmd.CommandText = commandText;
          int val = cmd.ExecuteNonQuery();

          conn.Close();
          return val;
      }

      public static int ExecuteNonQuery(string commandText, params SQLiteParameter[] commandParameters)
      {
          
          conn.Open();

          SQLiteCommand command = new SQLiteCommand();
          command.Connection = conn;
          command.CommandText = commandText;
          if (commandParameters != null)
              command.Parameters.AddRange(commandParameters);
          int val = command.ExecuteNonQuery();

          command.Dispose();
          conn.Close();

          return val;
       }

      public static int ExecuteNonQuery(SQLiteCommand command, string commandText, params SQLiteParameter[] commandParameters)
      {
          if (command.Connection.State == ConnectionState.Closed)
              command.Connection.Open();
          command.CommandText = commandText;
          command.Parameters.Clear();
          if (commandParameters != null)
              command.Parameters.AddRange(commandParameters);
          return command.ExecuteNonQuery();
      }


      // 查询并返回datatable
      public static DataTable ExecuteDataTable(string commandText, params SQLiteParameter[] commandParameters)
      {
          conn.Open();

          SQLiteCommand command = new SQLiteCommand();
          command.Connection = conn;
          command.CommandText = commandText;
          if (commandParameters != null)
              command.Parameters.AddRange(commandParameters);
          // 开始读取
          SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
          DataTable data = new DataTable();
          adapter.Fill(data);
          // dispose
          adapter.Dispose();
          command.Dispose();
          conn.Close();

          return data;
      }


      // 创建参数
      public static SQLiteParameter CreateParameter(string parameterName, System.Data.DbType parameterType, object parameterValue)
      {
          SQLiteParameter parameter = new SQLiteParameter();
          parameter.DbType = parameterType;
          parameter.ParameterName = parameterName;
          parameter.Value = parameterValue;
          return parameter;
      }

      public static int IsTableExists(string tableName)
      {
          conn.Open();

          SQLiteCommand command = new SQLiteCommand();
          command.Connection = conn;
          command.CommandText = "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='" + tableName + "'";
          int val = Convert.ToInt32(command.ExecuteScalar());

          command.Dispose();
          conn.Close();

          return val;
      }

      public static int CountNum(string str)
      {
          conn.Open();
          SQLiteCommand command = new SQLiteCommand();
          command.Connection = conn;
          command.CommandText = str;
          int val = Convert.ToInt32(command.ExecuteScalar());

          command.Dispose();
          conn.Close();

          return val;
      }

  }
相关推荐
广州智造4 小时前
OptiStruct实例:3D实体转子分析
数据库·人工智能·算法·机器学习·数学建模·3d·性能优化
技术宝哥7 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸9 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1239 小时前
Redis解析
数据库·redis·缓存
数据库幼崽9 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd9 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou10 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh10 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵12 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多12 小时前
Linux——mysql主从复制与读写分离
数据库·mysql