C#对Sqllite操作

news2024/11/17 9:35:15

前言

数据库的操作也是程序设计中的家常便饭了,关系型数据库中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命令字符串中添加对应占位信息。

 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、执行命令无返回值

  //执行命令无返回值
  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

// 查询并返回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、创建表单


        //创建表单
        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、插入数据

 //增加数据
 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、事务方式插入多条数据

  /// <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);
      }
  }

六、完整帮助类

  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;
      }

  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息学奥赛初赛天天练-54-CSP-J2019阅读程序3-二叉树、满二叉树、单侧二叉树、二分查找、递归、等差数列求和

PDF文档公众号回复关键字:20240803 2019 CSP-J 阅读程序3 1阅读程序(程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填 。除特殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff0c;共计 40 分) 01 #include <iostre…

idea项目创建提交到gitee gitee创建仓库 gitee删除仓库(全网最新最详细)

一、gitee创建仓库 1.如下图 2.创建好后如下图 3.打开idea创建好项目 3.1点击终端 3.2 从gitee页面复制命令进行运行 具体步骤如下图&#xff1a; 在步骤5时可能会提醒你远程仓库没有main分支&#xff0c;这个时候需要执行下图中的命令4创建一个远程main分支 结果运行如下图…

GATK ReferenceDataSource接口介绍

在 GATK(Genome Analysis Toolkit)库中,ReferenceDataSource 接口是一个重要的接口,用于表示与参考基因组相关的数据源。它提供了一种标准化的方式来访问和操作参考基因组的不同来源的数据。ReferenceMemorySource 类和ReferenceFileSource 类是ReferenceDataSource接口的实…

给本地设备搭建一个云端语音助手

概述 本语音助手实现了从关键词唤醒 (KWS) 到语音识别 (ASR) 再到自然语言理解 (NLU) 的完整流程。该系统可以通过监听用户的音频输入,检测指定的关键词,并将用户的语音转换为文本,最后与预设的命令进行匹配,执行相应的操作(具体实现请参考main.py),为你的设备配置远程…

ASPCMS

1.后台修改配置文件拿Shell 步骤一&#xff1a;访问以下地址为ASPCMS...并登陆到后台&#xff08;这里注意在搭建站点的时候注意权限问题&#xff09; #网站后台 http://192.168.4.139/admin_aspcms/login.asp //全功能版本 #账户密码 username:admin password:123456 步骤二…

API网关理解

项目背景介绍&#xff1a; 首先介绍一下项目背景&#xff0c;这个项目是API开发平台&#xff0c;需要完成的接口的功能是&#xff1a;统计谁调用了这个接口&#xff0c;并且将这个接口的调用次数1&#xff0c;剩余次数-1。 首先看到这个需求第一反应&#xff1a; 得先建个表…

第三期书生大模型实战营之浦语提示词工程实践

一. 基础任务 背景问题&#xff1a;近期相关研究发现&#xff0c;LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题&#xff0c;例如认为13.8<13.11。 任务要求&#xff1a;利用LangGPT优化提示词&#…

林轩田机器学习基石——笔记1.2 Learn to Answer Yes/No(如何进行学习)

When can Mechine learn&#xff1f; 2.Learn to Answer Yes/No&#xff08;如何进行学习&#xff09; 2.1perceptron hypothesis set 2.2Perceptron Learning Algorithm 2.3Guarantee of PLA 2.4Non-Separate Data Why can Mechine learn&#xff1f; How can Mechine …

通向 AGI 之路:大型语言模型(LLM)技术精要

ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型&#xff08;LLM,Large Language Model&#xff09;效果能好成这样&#xff1b;惊醒是顿悟到我们对LLM的认知及发展理念&#xff0c;距离世界最先进的想法&#xff0c;差得有点远。我属于既惊喜又惊醒的那一批&a…

Android 12系统源码_Settings(一)认识Preference

前言 想刀一家公司的心事藏不住的&#xff0c;原本只了解一下Android系统应用Settings的配置开关列表中某个开关开启或关闭的时候&#xff0c;系统做了哪些响应操作&#xff0c;结果搞了半天发现完全看不懂。写界面就写界面吧&#xff0c;但是Settings模块完全没有使用Android…

STM32Cubemx在FreeRTOS中使用面向对象的方式使用串口

文章目录 前言一、创建FreeRTOS工程二、创建文件对串口进行封装三、代码编写总结 前言 本篇文章将带大家来学习使用面向对象的方式在FreeRTOS中使用串口&#xff0c;使用面向对象的方法非常适合编写可移植性强的代码&#xff0c;那么这篇文章就带大家来看一下这个代码要怎么写…

Evaluating the Generation Capabilities of Large Chinese Language Models

文章目录 题目摘要相关工作CG-Eval实验 题目 评估大型中文语言模型的生成能力 论文地址&#xff1a;https://arxiv.org/abs/2308.04823 项目地址&#xff1a;http://cgeval.besteasy.com/ 摘要 本文介绍了 CG-Eval&#xff0c;这是有史以来第一个全面的自动化评估框架&#xf…

《Milvus Cloud向量数据库指南》——什么是二进制嵌入?

引言 向量嵌入在现代机器学习和数据科学中已成为不可或缺的工具,它们能够将复杂数据以算法可以理解的数值格式表示。尽管密集嵌入因其能够以最小的信息损失保留语义含义而普遍存在,但随着数据量的增加,它们的计算需求和内存需求也在增加。这种增加促使开发者寻求更高效的数…

Python RPA流程自动化机器人简单案例

RPA&#xff08;Robotic Process Automation&#xff0c;机器人流程自动化&#xff09;是一种通过软件机器人模拟和执行人类用户在计算机上的操作的技术。 下面是pyautogui 键盘操作的常见参数说明&#xff1a; https://blog.csdn.net/wydyzq12/article/details/122008396 以…

TDEngine(taos) 涛思数据库-java写入数据

一、java写入taos简单案例&#xff1a; pom.xml 中加入以下依赖。 <dependency><groupId>com.taosdata.jdbc</groupId><artifactId>taos-jdbcdriver</artifactId><version>3.3.0</version> </dependency> java代码 import…

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词&#xff1a; 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 前排提示&#xff1a;文末有CSDN独家网络安全资料包&#xff01; 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有…

医疗器械网络安全 | 第三方组件安全检测怎么做?

医疗器械软件安全中的第三方组件安全检测是确保医疗器械软件整体安全性的重要环节。以下是如何进行第三方组件安全检测的详细步骤&#xff1a; 一、明确检测目标 首先&#xff0c;需要明确检测的目标和范围&#xff0c;即确定哪些第三方组件需要进行安全检测。这通常包括操作系…

C++初学(10)

10.1、共用体 共用体是一种数据格式&#xff0c;它能够存储不同的数据类型&#xff0c;但只能同时存储其中的一种类型。比如说&#xff1a;结构可以同时存储int、long、和double&#xff0c;而共用体只能存储int、long、或double。共用体的句式与结构相似&#xff0c;但含义不…

计算复杂度论文解读系列(1)《通用顺序搜索问题》---L. A. Levin

《通用顺序搜索问题》 L. A. Levin 摘要 本文研究了几种著名的“顺序搜索类型”问题&#xff0c;并证明这些问题只能在解决任何同类型问题所需的时间内得到解决。 1 简介 在阐明算法的概念之后&#xff0c;证明了许多经典问题的算法不可解性&#xff08;例如&#xff0c;群元…

【时时三省】unity test 测试框架 使用 code blocks 移植

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 目录 1&#xff0c;使用 Code::Blocks 17.12 创建工程 2&#xff0c;移植文件至该工程下&#xff1a; 移入的文件为: 被移入的文件介绍&#xff1a; 更改代码&#xff1a; 向工程添加文…