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. 解决WIN7第一次开机冷启动QQ未响应的办法

    为什么WIN7第一次开机冷启动QQ未响应?WIN10就没事? http://bbs.wuyou.net/forum.php?mod=viewthread&tid=409516&extr ...

  2. Arrays和String单元测试

    20175227张雪莹 2018-2019-2 <Java程序设计> Arrays和String单元测试 要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关 ...

  3. vue 跨域问题

    前段时间做一个vue打包成安卓和IOS的App,遇到了跨域问题,直接拿了之前项目的配置,却不起作用. import org.springframework.context.annotation.Con ...

  4. vim的基础操作

       

  5. InetSim配置使用

    参考网址: http://techanarchy.net/2013/08/installing-and-configuring-inetsim/ https://blog.csdn.net/isins ...

  6. python(list、字典、元组、字符串方法、文件读写)草稿

    1.list 定义list a = [] 添加元素 a.append('xx')   #在list末尾添加 a.insert(0,'abc')   #在指定某位置添加元素.指定的下标不存在就在末尾添加 ...

  7. 缓存--Redis

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  8. 数据分析与科学计算可视化-----用于科学计算的numpy库与可视化工具matplotlib

    一.numpy库与matplotlib库的基本介绍 1.安装 (1)通过pip安装: >> pip install matplotlib 安装完成 安装matplotlib的方式和nump ...

  9. Django建站+Vuejs前端

    第一节 @注意 千万注意格式.标签名字: 浏览器开发者模式修改页面不显示:在开发者模式下(F12进入),打开设置页面(F1),勾选 Disable cache (while DevTools is o ...

  10. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...