zoukankan      html  css  js  c++  java
  • 数据库操作通用方法(线程)

    有关数据库增删改(通用方法)

    private void AccEss数据库增删改(List<string> 表达式, bool 控制 = false)  
    {  
        int 影响数 = 0;  
        Thread 执行操作 = new Thread(delegate()  
        {  
            OleDbConnection 连接 = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = 数据库名.mdb");  
            连接.Open();  
            foreach (string 元素 in 表达式)  
            {  
                OleDbCommand 执行 = new OleDbCommand(元素, 连接);  
                影响数 += 执行.ExecuteNonQuery();  
            }  
            连接.Close();  
        });  
        执行操作.Start();  
        执行操作.Join();/*有些执行过程不需提示控制*/  
        if (影响数 > 0 && 控制) MessageBox.Show("数据保存成功!受影响数" + 影响数.ToString("〖00000〗"), "友情提醒", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);  
    }  

    执行示例[增-数据插入]:

    List<string> 数据库执行语句 = new List<string>();  
    数据库执行语句.Add("INSERT INTO 数据表名 (字段名1,字段名2) VALUES ('" + 数据1 + "', '" + 数据2 + "')");  
    AccEss数据库增删改(数据库执行语句, false); 

    执行示例[改-数据更新]:

    数据库执行语句.Add("UPDATE 数据表名 SET 字段名1 = '" + 数据1 + "' , 字段名2 = '"  
                      + 数据2 + "' WHERE _ID = " + int.Parse(数据ID));  
    AccEss数据库增删改(数据库执行语句, false);

    执行示例[删-数据删除]:

    数据库执行语句.Add("DELETE FROM 数据表名 WHERE 字段名 = '" + 删除.Text + "' and _ID = " + int.Parse(数据ID));  
    AccEss数据库增删改(数据库执行语句, true); 

    执行示例[综合-多表-批量]:

    数据库执行语句.Add("INSERT INTO 数据表名1 (字段名1,字段名2) VALUES ('" + 数据1 + "', '" + 数据2 + "')");  
           数据库执行语句.Add("UPDATE 数据表名2 SET 字段名1 = '" + 数据1 + "' , 字段名2 = '" + 数据2 + "' WHERE _ID = " + int.Parse(数据ID));  
           数据库执行语句.Add("DELETE FROM 数据表名3 WHERE 字段名 = '" + 删除.Text + "' and _ID = " + int.Parse(数据ID));  
           AccEss数据库增删改(数据库执行语句, true);  
      
    AccEss数据库增删改(表达式:数据库执行语句);  

    之所以写成这样形式,理由1:如果某语句在多处被用到则归纳;理由2:便于代码维护;理由3:可以很方便写到类文件中编译为DLL文件.

    无论是AccEss数据库还是Sql数据库或.NET支持的数据提供者,只要改变对应的语句即可通用.如:AccEss数据库则使用OleDbConnection和OleDbCommand,Sql数据库则使用SqlConnection和SqlCommand,语法是一样的,修改即可.

    有关数据库查询与填充(通用方法)

    方法:DataSet 缓存数据表 = new DataSet();

    private void AccEss数据库查询与填充(string 表达式, string 表名 = "默认", bool 控制数据叠加 = false)/*定义可选参数*/  
    {  
        try  
        {  
            Thread 数据询填 = new Thread(delegate()  
            {  
                OleDbConnection 建立连接 = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = 数据库名.mdb");  
                OleDbDataAdapter 数据集 = new OleDbDataAdapter(表达式, 建立连接);  
                if (缓存数据表.Tables[表名] != null && !控制数据叠加)  
                {  
                    缓存数据表.Tables[表名].Clear();  
                    /*下面语句看情况调用*/  
                    缓存数据表.Tables[表名].Dispose();  
                    GC.SuppressFinalize(缓存数据表.Tables[表名]);  
                }  
                数据集.Fill(缓存数据表, 表名);  
                绑定源 = BindingContext[缓存数据表, 表名];  
            });  
            数据询填.Start();  
            数据询填.Join();  
        }  
        catch (Exception Ts)  
        { 错误友情提示("连接数据库、查询、填充数据错误! " + Ts.ToString()); }  
        finally { }  
    }  

    调用:

    string 表达式 = "SELECT * FROM 表名 WHERE 字段名 like'" + 查询数据 + "' order by _ID ASC";  
           AccEss数据库查询与填充(表达式, "表名称", false);

    如果需要叠加多次查询结果则:AccEss数据库查询与填充(表达式, "表名称", true);即可。 

    使用传递命名参数的写法

    AccEss数据库查询与填充(表达式:表达式, 表名:表名, 控制数据叠加:true)/*按原顺序传参数*/  
    AccEss数据库查询与填充(控制数据叠加:true, 表名:表名, 表达式:表达式)/*按任意顺序传参数*/  
  • 相关阅读:
    【转载】nio介绍+原理+传统IO原理+与传统IO区别+案例
    【Ubuntu】制作执行脚本 | 打包一串命令顺序执行
    Ubuntu 使用教程集锦
    【转载】自定义地图数据瓦片化请求的一种实现方案
    【转载】ROS机器人程序设计 | 期末知识点大总结
    【转载】三维重建(三)相机参数标定与光束平差法(Bundle Adjustment)
    【阅读笔记】《大话数据挖掘》定义和功能
    【转载】C++对象成员与构造函数
    【转载】IP地址和子网划分学习笔记之《子网掩码详解》
    STM32的启动过程一
  • 原文地址:https://www.cnblogs.com/HappyEDay/p/5952001.html
Copyright © 2011-2022 走看看