基于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=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适用于多版本数据库的更多相关文章
- 基于angular写的一个todolist
对于新手来说,使用angularjs写一个todolist可以快速入门
- 基于Vue2写的一个有关美食项目
刚学Vue练习的一个项目 使用Vue2+vue-router+vuex+axios+webpack router使用了默认的hash模式 引入了高德地图和element-ui 项目地址点击这里 演示地 ...
- 分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类
一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlse ...
- 基于websocket实现的一个简单的聊天室
本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编 ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...
- [browser navigator],写了个检测游览器版本
前些天胃不舒服打吊针了,真得准时吃饭各种啊,然后就是懒,就没在复习了,这次复习的内容是navigator //未知效果 // console.log('浏览器的次要版本' + navigator.ap ...
- 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...
- 【Python】如何基于Python写一个TCP反向连接后门
首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...
- 基于七牛Python SDK写的一个批量下载脚本
前言 上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载. 虽然这个需求不太强烈,但有可能有人(在备份.迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也 ...
随机推荐
- HTML与CSS:结构与表现
在HTML和CSS里存在着部分重复的功能,例如两者都可以设定一段文字的字体属性.既然如此,为啥还要CSS呢(至少,为啥CSS里存在着和HTML标签属性重复的东西呢)? 这是因为,HTML和CSS的用途 ...
- Android Studio Gradle依赖冲突
版本冲突 Gradle提供了两种解决版本冲突的策略:Newest和Fail.默认策略是Newest,配置Fail模式: configurations.all { resolutionStrategy. ...
- 关于栈、队列、优先队列的应用——UVa11995
这本来是上一篇博客里的内容,但不知道什么原因breakdown了……我就简单放上一道题好了 题意:这道题的题目是“猜猜数据结构”,题意就是给你一些输入输出数据,让你根据这些数据判断是什么数据结构.要猜 ...
- python_hashlib模块
1 网站登陆 import random import string import pickle # data1 = string.ascii_letters # print("data1数 ...
- qnx i2c 学习 二
File still Updating.... many errors have been FOUND , need big change qnx i2c structure --written ...
- Centos7之系统优化
优化条目: 修改ip地址.网关.主机名.DNS等 关闭selinux,清空iptables 添加普通用户并进行sudo授权管理 更新yum源及必要软件安装 定时自动更新服务器时间 精简开机自启动服务 ...
- 关于matlab2018a版本错误使用 svmclassify 分类器
当我们照常使用分类器函数svmclassify时,2018版的matlab会报出以下错误: 解决办法: 1,下载libsvm(一般下载最新版本就ok了)包,并将其添加至matlab的toolbox文件 ...
- 详解vuex
一.vuex的作用: vuex是一个专为Vue.js应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件状态,并以相应的规则保证状态以一种可预测的方式变化. 作用:组件之间的通信,大规模的逻 ...
- mac与Windows系统支持软件汇总
踩过的坑,记录下
- 数组Array的API2
数组的方法 arr.push() arr.unshift() arr.pop() arr.shift() arr.slice() arr.splice() arr.join() arr.find() ...