• 基于Dapper写的一个sqlhelp适用于多版本数据库




    ConnectionInit方法用于初始化数据库连接对象,

    只需要修改databasetype参数即可进行适用各个版本的数据库,

    ExecuteNonQuery方法用于执行增、删、改操作,返回受影响的行数,
    ExecuteTableSQL方法用于执行查询操作,返回datatable格式的数据,
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using Dapper;
    
    namespace DataManager
    {
        public static class DaHelper
        {
    
            private static IDbConnection ConnectionObject = null;//连接数据类的对象
            private static string ConnectionString = "";//连接的字符串
            private static int DataBaseType = 0;//数据库的类型0=sqlserver,1=access,2=oracle,3=mysql
    
            /// <summary>
            /// 设置连接的字符串及数据库类型    
            /// </summary>
            /// <param name="str">连接的字符串</param>
            /// <param name="_type">数据库类型0=sqlserver,1=access,2=oracle,3=mysql</param>
            public static void ConnectionInit(string str, int _type)
            {
                ConnectionString = str;
                DataBaseType = _type;
                SetConnection();
            }
    
            /// <summary>
            /// 设置连接类的对象
            /// </summary>
            private static void SetConnection()
            {
                switch (DataBaseType)
                {
                    case 0:
                        ConnectionObject = new System.Data.SqlClient.SqlConnection(ConnectionString);//连接sqlserver                  
                        break;
                    case 1:
                        ConnectionObject = new System.Data.OleDb.OleDbConnection(ConnectionString);//连接access
                        break;
                    case 2:
                        ConnectionObject = new System.Data.OracleClient.OracleConnection(ConnectionString);//连接oracle
                        //处理办法:
                        //在oracle 安装目录下 找到 Oracle.DataAccess.dll添加引用,然后 using Oracle.DataAccess.Client;
                        //其他的都不用动,即可。
                        //连接字符串中 如有 用的是 user=xxx 就改成user id=xxx
                        //把原来 Using 的System.Data.OracleClient去掉即可
                        break;
                    case 3:
                        ConnectionObject = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString);//连接mysql
                        break;
                }
    
            }
    
            /// <summary>
            /// 打开数据库连接
            /// </summary>
            private static void OpenConnection()
            {
                if (ConnectionObject.State == System.Data.ConnectionState.Closed)
                {
                    ConnectionObject.Open();
                }
            }
            /// <summary>
            /// 关闭数据库连接
            /// </summary>
            private static void CloseConnection()
            {
                if (ConnectionObject.State == System.Data.ConnectionState.Open)
                {
                    ConnectionObject.Close();
                }
            }
    
            /// <summary>
            /// 执行sql并且返回受影响的行数
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="type"></param>
            /// <param name="para"></param>
            /// <returns></returns>
            public static int ExecuteNonQuery(string sql, object _object)
            {
                lock (ConnectionObject)
                {
                    try
                    {
                        OpenConnection();
                        return ConnectionObject.Execute(sql, _object);
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        CloseConnection();
                    }
                }
            }
    
            /// <summary>
            /// 执行查询的sql语句,并且返回datatable结果
            /// </summary>
            /// <param name="sql"></param>
            /// <param name="param"></param>
            /// <returns></returns>
            public static DataTable ExecuteTableSQL(string sql, object _object)
            {
                lock (ConnectionObject)
                {
                    try
                    {
                        OpenConnection();
                        IDataReader idr = ConnectionObject.ExecuteReader(sql, _object);
                        return IDataReaderToDataTable(idr);
                    }
                    catch
                    {
                        throw;
                    }
                    finally
                    {
                        CloseConnection();
                    }
                }
    
            }
            /// <summary>
            /// 把idatareader转换成datatable
            /// </summary>
            /// <param name="reader"></param>
            /// <returns></returns>
            private static DataTable IDataReaderToDataTable(IDataReader reader)
            {
    
                DataTable objDataTable = new DataTable();
    
                int intFieldCount = reader.FieldCount;
                for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
                {
                    objDataTable.Columns.Add(reader.GetName(intCounter), typeof(string));
                }
    
                objDataTable.BeginLoadData();
                object[] objValues = new object[intFieldCount];
    
    
                while (reader.Read())
                {
                    reader.GetValues(objValues);
                    objDataTable.LoadDataRow(objValues, true);
    
                }
                reader.Close();
                objDataTable.EndLoadData();
    
                return objDataTable;
            }

    初始化例子:

    DataManager.DaHelper.ConnectionInit("server=127.0.0.1;uid=root;pwd=;database=TouchDisplay;pooling=false;CharSet=utf8;port=3306;", 3);//连接mysql数据库

    增、删、改例子:

            /// <summary>
            /// 新增排队记录
            /// </summary>
            /// <param name="CarNo">车牌</param>
            /// <param name="QueueNo">排队号码</param>
            /// <param name="QueueIndex">排队序号</param>
            /// <param name="IcCard">Ic卡号</param>
            /// <param name="CargoNo">油品</param>
            /// <param name="ComeTime">登记时间</param>
            /// <param name="StateNo">状态</param>
            /// <returns></returns>
            public static int AddQueue(string CarNo, string QueueNo, int QueueIndex,string IcCard, string CargoName,DateTime ComeTime, int StateNo)
            {
                string sql = "Insert Into Table_Queue (CarNo,QueueNo,QueueIndex,IcCard,CargoName,ComeTime,StateNo) Values(@CarNo,@QueueNo,@QueueIndex,@IcCard,@CargoName,@ComeTime,@StateNo);";
                object para = new
                {
                    CarNo = CarNo,
                    QueueNo = QueueNo,
                    QueueIndex = QueueIndex,
                    IcCard=IcCard,
                    CargoName = CargoName,
                    ComeTime=ComeTime,
                    StateNo = StateNo,
                };
                return DaHelper.ExecuteNonQuery(sql, para);
            }
    
    
            /// <summary>
            /// 根据车牌号码删除队列中的车辆
            /// </summary>
            /// <param name="CarNo"></param>
            /// <returns></returns>
            public static int RemoveCarDataByCarNo(string CarNo)
            {
                string sql = "delete from Table_Queue where CarNo=@CarNo and  StateNo = 0";
                object para = new
                {
                    CarNo = CarNo,
                };
                return DaHelper.ExecuteNonQuery(sql, para);
            }
    
            /// <summary>
            /// 根据车牌号更新车辆信息
            /// </summary>
            /// <param name="CarNo"></param>
            /// <param name="QueueIndex"></param>
            /// <returns></returns>
            public static int UpdateQueueByCarNo(string CarNo, string IcCard, string CargoName)
            {
                string sql = "update Table_Queue set IcCard=@IcCard ,CargoName=@CargoName where CarNo=@CarNo and  StateNo = 0 or CarNo=@CarNo and  StateNo = 1";
                object para = new
                {
                    CarNo = CarNo,
                    IcCard = IcCard,
                    CargoName = CargoName,
                };
                return DaHelper.ExecuteNonQuery(sql, para);
            }

    查询例子:

            /// <summary>
            /// 获取排队列表
            /// </summary>
            /// <returns></returns>
            public static DataTable GetAllQueueing()
            {
                string sql = "select QueueNo ,CarNo ,CargoName  from Table_Queue where StateNo =0 order by QueueIndex";
    
                DataTable dt = DaHelper.ExecuteTableSQL(sql, null);
                return dt;
            }

    the end

  • 相关阅读:
    《插件式GIS应用框架的设计与实现》一书中一个小问题
    ArcGIS API for Silverlight 入门学习笔记(一)hello world 补充问题
    ArcGIS API for Silverlight 入门学习笔记(一):hello world
    20120906CSS学习笔记
    ASP Response
    20120830笔记
    ASP Request
    201299日记
    20120907学习笔记
    LINKSERVER跨服务器之间的数据拷贝
  • 原文地址:https://www.cnblogs.com/kellen451/p/7122719.html
Copyright © 2020-2023  润新知