续《基于C# 开发的SOL SERVER 操作数据库类(SQLHelp》 ——第二弹
续上一节,本节给出SQLHelp的具体实现方法——《YSFSQLHelp》,个人根据自己需要新建适合的类,本节根据参考网上资料,根据自己的需要编写的SQL帮助类。下面直接给出具体实现:

//Data Source=.;Initial Catalog=SEFEvaluation;Persist Security Info=True;User ID=sa;Password=***********
public static string SqlHost = GetConfig.GetConfiguration("ConnectionStrings:SqlHost");
public static string SqlAdminName = GetConfig.GetConfiguration("ConnectionStrings:SqlAdminName");
public static string SqlAdminPswd = GetConfig.GetConfiguration("ConnectionStrings:SqlAdminPswd");
public static string SqlCatalogProFix = GetConfig.GetConfiguration("ConnectionStrings:SqlCatalogProFix");
public static string strcon = string.Format(@"Data Source={0};User ID={1};Password={2};Initial Catalog={3};Pooling=true", SqlHost, SqlAdminName, SqlAdminPswd, SqlCatalogProFix); // public static string strcon = "Server=8.135.110.228;Initial Catalog=TestDB;User ID=sa;Password=QVq4iu=yV$ge7*qQ.6e,yL|hg!8d-79.,@yv?P=hj/JB72sd567";
//数据库连接字符串(web.config来配置)
//<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" />
#region 类中的全局变量-数据连接字符串
// public static string strcon = "Data Source=127.0.0.1;User ID=sa;Password=family962464QR;Initial Catalog=SEFEvaluation;Pooling=true";//连接字符串,使用Windows登录方式
// public static string strcon = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString.ToString();//连接字符串,使用Windows登录方式
#endregion #region 构造函数
/// <summary>
/// 构造函数,初始化时连接数据库
/// </summary>
public YSFSQLHelp()
{
strcon = strcon;// ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString.ToString();
}
#endregion
#region 其他转化与编码
/// <summary>
/// MD5加密
/// </summary>
/// <param name="strPwd">被加密的字符串</param>
/// <returns>返回加密后的字符串</returns>
public string GetMD5(string strPwd)
{
string pwd = "";
//实例化一个md5对象
MD5 md5 = MD5.Create();
// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择
byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(strPwd));
//翻转生成的MD5码
s.Reverse();
//通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
//只取MD5码的一部分,这样恶意访问者无法知道取的是哪几位
for (int i = 3; i < s.Length - 1; i++)
{
//将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符
//进一步对生成的MD5码做一些改造
pwd = pwd + (s[i] < 198 ? s[i] + 28 : s[i]).ToString("X");
}
return pwd;
}
/// <summary>
/// table转化为数组
/// </summary>
/// <param name="table"> datatable对象</param>
/// <param name="status">M,只查一条数据,否则查多条</param>
/// <returns></returns>
public List<Dictionary<string, object>> QueryData(DataTable table, string status)
{
List<Dictionary<string, object>> outdata = new List<Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
try
{
DataTable tb = new DataTable();
tb = table;
//如果数据库返回的总数据量少于一页显示的量,则循环次数为返回的数据量,反之就是规定的一页数据量
//strip 具体拿取 的信息条数
if (tb.Rows.Count > 0)
{
if (status.Equals("M"))
{
for (int i = 0; i < tb.Rows.Count; i++)
{
//重置参数
listdata = new List<Dictionary<string, object>>();
dic = new Dictionary<string, object>(); for (int j = 0; j < tb.Columns.Count; j++)
{
dic.Add(tb.Columns[j].ColumnName, tb.Rows[i][j].ToString()); }
outdata.Add(dic);
}
}
else
{
//每查询一次就存入一次Outdata中 i是行数,c是列数
for (int i = 0; i < 1; i++)
{ dic = new Dictionary<string, object>();
for (int c = 0; c < tb.Columns.Count; c++)
{
dic.Add(tb.Columns[c].ColumnName, tb.Rows[i][c].ToString());
}
outdata.Add(dic);
}
}
}
}
catch (Exception ex)
{ }
return outdata;
}
/// <summary>
/// SqlDataReader转化为Table
/// </summary>
/// <param name="reader">SqlDataReader对象</param>
/// <returns></returns>
public DataTable ConvertDataReaderToDataTable(SqlDataReader reader)
{
try
{
DataTable objDataTable = new DataTable();
int intFieldCount = reader.FieldCount;
for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
{
objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
}
objDataTable.BeginLoadData(); object[] objValues = new object[intFieldCount];
while (reader.Read())
{
reader.GetValues(objValues);
objDataTable.LoadDataRow(objValues, true);
}
reader.Close();
objDataTable.EndLoadData(); return objDataTable; }
catch (Exception ex)
{
throw new Exception("转换出错!", ex);
} } /// <summary>
/// SQL 语句查询转化为数组
/// </summary>
/// <param name="cmdstr"> SQL语句</param>
/// <param name="status">M,查多条数据,否则1条</param>
/// <returns></returns>
public List<Dictionary<string, object>> QueryDataSQL(string cmdstr, string status)
{
List<Dictionary<string, object>> outdata = new List<Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
SqlConnection con = new SqlConnection(strcon);
SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
try
{
con.Open();
DataSet ds = new DataSet();
da.Fill(ds);
DataTable tb = new DataTable();
tb = ds.Tables[0];
//如果数据库返回的总数据量少于一页显示的量,则循环次数为返回的数据量,反之就是规定的一页数据量
//strip 具体拿取 的信息条数
if (tb.Rows.Count > 0)
{
if (status.Equals("M"))
{
for (int i = 0; i < tb.Rows.Count; i++)
{
//重置参数
listdata = new List<Dictionary<string, object>>();
dic = new Dictionary<string, object>(); for (int j = 0; j < tb.Columns.Count; j++)
{
dic.Add(tb.Columns[j].ColumnName, tb.Rows[i][j].ToString());
}
outdata.Add(dic);
}
}
else
{
//每查询一次就存入一次Outdata中 i是行数,c是列数
for (int i = 0; i < 1; i++)
{ dic = new Dictionary<string, object>();
for (int c = 0; c < tb.Columns.Count; c++)
{
dic.Add(tb.Columns[c].ColumnName, tb.Rows[i][c].ToString());
}
outdata.Add(dic);
}
}
}
}
catch (Exception ex)
{
con.Close();
CreateInLog("SQL 语句 " + cmdstr + "执行错误!" + ex.Message);
}
finally
{
con.Close();
}
return outdata;
}
/// <summary>
/// SQL 语句查询转化为数组
/// </summary>
/// <param name="strconn"> 自定义连接串</param>
/// <param name="cmdstr"> SQL语句</param>
/// <param name="status">M,查多条数据,否则1条</param>
/// <returns></returns>
public List<Dictionary<string, object>> QueryDataSQL(string strconn, string cmdstr, string status)
{
List<Dictionary<string, object>> outdata = new List<Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
SqlConnection con = new SqlConnection(strconn);
SqlDataAdapter da = new SqlDataAdapter(cmdstr, con);
try
{
con.Open();
DataSet ds = new DataSet();
da.Fill(ds);
DataTable tb = new DataTable();
tb = ds.Tables[0];
//如果数据库返回的总数据量少于一页显示的量,则循环次数为返回的数据量,反之就是规定的一页数据量
//strip 具体拿取 的信息条数
if (tb.Rows.Count > 0)
{
if (status.Equals("M"))
{
for (int i = 0; i < tb.Rows.Count; i++)
{
//重置参数
listdata = new List<Dictionary<string, object>>();
dic = new Dictionary<string, object>(); for (int j = 0; j < tb.Columns.Count; j++)
{
dic.Add(tb.Columns[j].ColumnName, tb.Rows[i][j].ToString());
}
outdata.Add(dic);
}
}
else
{
//每查询一次就存入一次Outdata中 i是行数,c是列数
for (int i = 0; i < 1; i++)
{ dic = new Dictionary<string, object>();
for (int c = 0; c < tb.Columns.Count; c++)
{
dic.Add(tb.Columns[c].ColumnName, tb.Rows[i][c].ToString());
}
outdata.Add(dic);
}
}
}
}
catch (Exception ex)
{
con.Close();
CreateInLog("SQL 语句 " + cmdstr + "在" + strconn + "执行错误!" + ex.Message);
}
finally
{
con.Close();
}
return outdata;
}
/// <summary>
/// SQL 执行本地查询存储过程转化为数组
/// </summary>
/// <param name="cmdstr"> SQL语句</param>
/// <param name="status">M,查多条数据,否则1条</param>
/// <returns></returns>
public List<Dictionary<string, object>> QueryDataParameter(string storedProcName, SqlParameter[] parameters, string status)
{
List<Dictionary<string, object>> outdata = new List<Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
//DataTable dataTable2 = new DataTable(); try
{
DataTable dataTable2 = SqlQueryParameter(storedProcName, parameters);
DataTable tb = new DataTable();
tb = dataTable2;
//如果数据库返回的总数据量少于一页显示的量,则循环次数为返回的数据量,反之就是规定的一页数据量
//strip 具体拿取 的信息条数
if (tb.Rows.Count > 0)
{
if (status.Equals("M"))
{
for (int i = 0; i < tb.Rows.Count; i++)
{
//重置参数
listdata = new List<Dictionary<string, object>>();
dic = new Dictionary<string, object>(); for (int j = 0; j < tb.Columns.Count; j++)
{ dic.Add(tb.Columns[j].ColumnName, tb.Rows[i][j].ToString()); }
outdata.Add(dic);
}
}
else
{
//每查询一次就存入一次Outdata中 i是行数,c是列数
for (int i = 0; i < 1; i++)
{ dic = new Dictionary<string, object>();
for (int c = 0; c < tb.Columns.Count; c++)
{ dic.Add(tb.Columns[c].ColumnName, tb.Rows[i][c].ToString()); }
outdata.Add(dic);
}
}
}
}
catch (Exception ex)
{
CreateInLog("SQL 存储过程 " + storedProcName + "执行错误!" + ex.Message);
}
finally
{ }
return outdata;
}
/// <summary>
/// SQL 执行非本地查询存储过程转化为数组
/// </summary>
/// <param name="strconn"> 自定义连接串</param>
/// <param name="cmdstr"> SQL语句</param>
/// <param name="status">M,查多条数据,否则1条</param>
/// <returns></returns>
public List<Dictionary<string, object>> QueryDataParameter(string strconn, string storedProcName, SqlParameter[] parameters, string status)
{
List<Dictionary<string, object>> outdata = new List<Dictionary<string, object>>();
Dictionary<string, object> dic = new Dictionary<string, object>();
List<Dictionary<string, object>> listdata = new List<Dictionary<string, object>>();
//DataTable dataTable2 = new DataTable(); try
{
DataTable dataTable2 = SqlQueryParameter(strconn, storedProcName, parameters);
DataTable tb = new DataTable();
tb = dataTable2;
//如果数据库返回的总数据量少于一页显示的量,则循环次数为返回的数据量,反之就是规定的一页数据量
//strip 具体拿取 的信息条数
if (tb.Rows.Count > 0)
{
if (status.Equals("M"))
{
for (int i = 0; i < tb.Rows.Count; i++)
{
//重置参数
listdata = new List<Dictionary<string, object>>();
dic = new Dictionary<string, object>(); for (int j = 0; j < tb.Columns.Count; j++)
{
dic.Add(tb.Columns[j].ColumnName, tb.Rows[i][j].ToString()); }
outdata.Add(dic);
}
}
else
{
//每查询一次就存入一次Outdata中 i是行数,c是列数
for (int i = 0; i < 1; i++)
{ dic = new Dictionary<string, object>();
for (int c = 0; c < tb.Columns.Count; c++)
{ dic.Add(tb.Columns[c].ColumnName, tb.Rows[i][c].ToString()); }
outdata.Add(dic);
}
}
}
}
catch (Exception ex)
{
CreateInLog("SQL 存储过程 " + storedProcName + "执行错误!" + ex.Message);
}
finally
{ }
return outdata;
}
#endregion
public static string SqlAdminName = GetConfig.GetConfiguration("ConnectionStrings:SqlAdminName");//数据库账号
public static string SqlAdminPswd = GetConfig.GetConfiguration("ConnectionStrings:SqlAdminPswd");//数据库密码
public static string SqlCatalogProFix = GetConfig.GetConfiguration("ConnectionStrings:SqlCatalogProFix");//数据库
public static string strcon = string.Format(@"Data Source={0};User ID={1};Password={2};Initial Catalog={3};Pooling=true", SqlHost, SqlAdminName, SqlAdminPswd, SqlCatalogProFix);

public static string GetConfiguration(string configKey)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build();
if (configKey.Contains(":"))
{
return config.GetSection(configKey).Value;//获取分级参数值
}
else
{
return config[configKey];//获取直级参数值
}
//youdianwenti w xiangxiang
}
如有侵权,请联系作者,将进行整改
今日分享结束
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享SQL SERVER 相关知识
续《基于C# 开发的SOL SERVER 操作数据库类(SQLHelp》 ——第二弹的更多相关文章
- 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等
可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...
- 数据库开发基础-SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)
控制数据库的服务: 方法一: 1.Windows+R 打开运行 打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...
- 数据库开发基础-★SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)★
控制数据库的服务: 方法一: 1.Windows+R 打开运行 打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...
- Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack
一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...
- PHP操作数据库类
<?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...
- ecshop操作数据库类
ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站 ...
- C++ 操作数据库类
#pragma once #include <string> #include <windows.h> #include <algorithm> #include ...
- SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。
今天创建数据库关系图,发现提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用 数据库属性 对话框的文件页或 ALTER AUTHORIZAITION 语句将数据库所有者 ...
- Python操作数据库类 Oracle、Sqlserver、PostgreSQL
我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...
- [ 转]Android快速开发–使用ORMLite操作数据库
OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来 ...
随机推荐
- Android开发_记事本(1)
一些知识 Textview TextView中有下述几个属性: id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行 ...
- Java设计模式 —— 桥接模式
10 桥接模式 10.1 桥接模式概述 Bridge Pattern: 将抽象部分与它的实现部分解耦,使得两者都能够独立变化. 桥接模式是一种很实用的结构型模式,如果系统中某个类存在两个独立变化的维度 ...
- React+Antd在使用form表单提交DatePicker日期框的时候会出现少八小时的情况
在使用antd做form表单提交的时候,突然发现了一个很有意思的bug.就是在使用datepicker组件日期框的时候会出现提交后少一天的问题 我在网上搜索了许多解决办法,也是困扰了我一天的时间,下面 ...
- Spring Boot 整合 Kafka
Kafka 环境搭建 kafka 安装.配置.启动.测试说明: 1. 安装:直接官网下载安装包,解压到指定位置即可(kafka 依赖的 Zookeeper 在文件中已包含) 下载地址:https:// ...
- openGauss Datakit安装部署
一.问题描述:目前找不到任何关于opengauuss Datakit安装部署的文档,自己来尝试踩坑. DataKit是一个以资源(物理机,数据库)为底座的开发运维工具,将上层的开发运维工具插件化,各插 ...
- SMT贴片加工钢网工艺制作方法
smt贴片加工过程中,首先要进行锡膏印刷,而锡膏印刷的工作原理就是用机器刮刀将锡膏推送到钢网的孔洞中,使锡膏与pcb板的电子元器件接触,为下一步焊接做准备.钢网的作用就是与pcb板焊盘位置固定,使锡膏 ...
- 非关系型数据库---Redis安装与基本使用
一.数据库类型 关系数据库管理系统(RDBMS) 非关系数据库管理系统(NoSQL) 按照预先设置的组织机构,将数据存储在物理介质上(即:硬盘上) 数据之间可以做无关联操作 (例如: 多表查询,嵌套查 ...
- Pandas的使用
在数据分析工作中,Pandas 的使用频率是很高的,一方面是因为 Pandas 提供的基础数据结构 DataFrame 与 json 的契合度很高,转换起来很方便.另一方面,如果日常的数据清理工作不是 ...
- Django框架——静态文件配置、form表单、request对象、连接数据库、ORM简介、ORM基本操作和语句
配置文件介绍 SECRET_KEY = '0yge9t5m9&%=of**qk2m9z^7-gp2db)g!*5dzb136ys0#)*%*a' # 盐 DEBUG = True # 调试模式 ...
- 当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!
开心一刻 中午和哥们一起喝茶 哥们说道:晚上喝酒去啊 我:不去,我女朋友过生日 哥们瞪大眼睛看着我:你有病吧,充气的过什么生日 我生气到:有特么生产日期的好吧 需求背景 系统对接了外部系统,调用外部系 ...