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=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 :
ConnectionObject = new System.Data.SqlClient.SqlConnection(ConnectionString);//连接sqlserver
break;
case :
ConnectionObject = new System.Data.OleDb.OleDbConnection(ConnectionString);//连接access
break;
case :
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 :
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 = ; 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

基于Dapper写的一个sqlhelp适用于多版本数据库的更多相关文章

  1. 基于angular写的一个todolist

    对于新手来说,使用angularjs写一个todolist可以快速入门

  2. 基于Vue2写的一个有关美食项目

    刚学Vue练习的一个项目 使用Vue2+vue-router+vuex+axios+webpack router使用了默认的hash模式 引入了高德地图和element-ui 项目地址点击这里 演示地 ...

  3. 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

    一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...

  4. 基于websocket实现的一个简单的聊天室

    本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...

  5. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  6. [browser navigator],写了个检测游览器版本

    前些天胃不舒服打吊针了,真得准时吃饭各种啊,然后就是懒,就没在复习了,这次复习的内容是navigator //未知效果 // console.log('浏览器的次要版本' + navigator.ap ...

  7. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  8. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  9. 基于七牛Python SDK写的一个批量下载脚本

    前言 上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载. 虽然这个需求不太强烈,但有可能有人(在备份.迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也 ...

随机推荐

  1. 防止shell script多次运行

    一个思路是在script初期检测系统中是否存在同名进程. ] then echo "This script is already running. Exit." else whil ...

  2. Chromium(Chrome) Sandbox Details

    What Sandbox Do? Sandbox leverages the OS-provided security to allow code execution that cannot make ...

  3. Group(), Groups(),& Groupdict() 用法

    group() 返回一个或多个匹配的字串.如果只有一个参数,结果只有单个字符串:如果有多个参数,结果是一个元组,元组里每一项对应一个参数.没有参数,group1默认是0(整个匹配串被返回).如果gro ...

  4. JS基础——原型和原型链

    1.相关知识点 (1)构造函数  (函数名首字母大写表示构造函数) function Foo(name,age){ this.name = name; this.age = age; this.cla ...

  5. JavaScript 正则表达式学习笔记

    定义规则让计算机去处理字符串正则表达式写法: //第一种 var reg = new RegExp('ab'); //第二种 var reg = /ab/; 量词:{} [a-z] 从小写a-z [A ...

  6. WordPress版微信小程序3.5版发布

    最近花时间对WordPress版微信小程序做了一些完善和调整,修复不少程序的问题.一个程序的完善是持续和渐进的,没有最好,只有更完善.虽然会采纳一些用户的建议和意见,但我会从一个产品角度去考虑,哪些功 ...

  7. 移植QT库的问题:QT_INSTALL/include/QtCore/qatomic_arm.h:131: Error: no such instruction: `swpb %al,

    解决办法:错误信息说明编译器未识别swpb汇编操作,指令集有问题.把配置命令改成: ./configure -embedded armv7 -prefix /home/thwijeth/Softwar ...

  8. react-native No bundle URL present

    解决方案: 1.删除ios目录下的build的目录,关闭模拟器,重新react-native run-ios大多数情况下可以解决 2.

  9. SpringBoot+Mybatis+Maven+MySQL逆向工程实现增删改查

    SpringBoot+Mybatis+MySQL+MAVEN逆向工程实现增删改查 这两天简单学习了下SpringBoot,发现这玩意配置起来是真的方便,相比于SpringMVC+Spring的配置简直 ...

  10. 获取物理内存total值和used值

    1.使用 free -m 查看 2.物理内存total值 # free -m | grep Mem | awk '{print $2}' 3.物理内存used值 # free -m | grep Me ...