续《基于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面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来 ...
随机推荐
- [Web Server]Tomcat调优之工作原理、线程池/连接池
1 Tomcat 概述 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛. 1.0 Tomcat 容器与原理 1.0.1 Tomcat组件构成 注意,如图所示,阴影部 ...
- 五月九号java基础知识点
1.哈希集合元素不按顺序排序,若要排序使用LinkedHashSet类2.树集合类不仅实现Set接口,还实现java.lang.SortedSet接口来实现排序操作3.TreeSet<Strin ...
- vue中通过$emit实现子向父通信
本篇讨论vue中使用$emit实现子向父通信, 第一步:我们在父组件中注册子组件,然后再给子组件标签添加一个自定义事件监听,这样在子组件实例上就绑定了一个自定义的事件add. 后面如果触发add事件, ...
- DRF版本控制(源码分析)
DRF中版本控制的五种情况(源码分析) 在restful规范中要去,后端的API中需要体现版本. drf框架中支持5种版本的设置. 1. URL的GET参数传递(*) 示例: user/?versio ...
- 连接MongoDB+Docker安装MongoDB
一.连接MongoDB 工具:studio 3T 下载:https://studio3t.com/download-thank-you/?OS=win64 1.无设置密码 最终成功页面 2.设置了密码 ...
- 人工智能AI图像风格迁移(StyleTransfer),基于双层ControlNet(Python3.10)
图像风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一幅图像的风格应用到另一幅图像上,从而生成一幅新图像,该新图像结合了两幅原始图像的特点,目的是达到一种风格化叠加的效果,本次我们 ...
- C#写一套最全的MySQL帮助类(包括增删改查)
介绍说明:这个帮助类包含了六个主要的方法:ExecuteNonQuery.ExecuteScalar.ExecuteQuery.ExecuteQuery(泛型).Insert.Update和Delet ...
- 22-source-map
const { resolve } = require('path') const htmlWebpackPlugins = require('html-webpack-plugin') module ...
- R的画图
关于R基础 有3个需要总结的地方 R的画图(统计学图,ggplot) R的基本语法 R dataframe相关 Plot plot(1,2) plot(c(1, 2, 3, 4, 5), c(3, 7 ...
- Python全栈开发工程师 day57 jQuery
二.jQuery样式操作标签样式操作<!DOCTYPE html><html lang="en"><head> <meta charset ...