续上一节,本节给出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 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);
ConnectionStrings appsettings文件配置的数据库连接串
GetConfiguration//获取配置的数据库连接信息
也可以使用依赖注入调用

        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》 ——第二弹的更多相关文章

  1. 非常不错的ASP操作数据库类,支持多数据库MSSQL,ACCESS,ORACLE,MYSQL等

    可同时操作多个不同类型的数据库. 完全不用考虑数据类型的差别,再也不用想字符型字段加不加单引号. 调用非常简单,对数据库的主要操作一般只需要一行代码. 支持mssql事务回滚. 可自动生成和输出sql ...

  2. 数据库开发基础-SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  3. 数据库开发基础-★SQl Server 控制数据库的服务+数据库的创建与管理(增删改查)★

    控制数据库的服务: 方法一: 1.Windows+R 打开运行  打开cmd 2.输入net start MSSQLserver 启动数据库服务 输入net stop MSSQLserver 关闭数据 ...

  4. Android开发12——Andorid中操作数据库的insert的两种方法以及nullColumnHack

    一.发现问题 先看两种方法插入数据 public void save(Person p){ SQLiteDatabase db = dbHelper.getWritableDatabase(); db ...

  5. PHP操作数据库类

    <?php /** * 功能: 数据库操作类 . * 作者: 赵铭哲 * 日期: 2016-05-23 * 时间: 9:43 */ namespace ZH\DataBase; use \Exc ...

  6. ecshop操作数据库类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站 ...

  7. C++ 操作数据库类

    #pragma once #include <string> #include <windows.h> #include <algorithm> #include ...

  8. SQL Server 新建 数据库关系图 时弹出警告提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象。

    今天创建数据库关系图,发现提示此数据库没有有效所有者,因此无法安装数据库关系图支持对象.若要继续,请首先使用 数据库属性 对话框的文件页或 ALTER AUTHORIZAITION 语句将数据库所有者 ...

  9. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

    我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...

  10. [ 转]Android快速开发–使用ORMLite操作数据库

    OrmLite是一个数据库操作辅助的开源框架,主要面向Java语言.在Android面向数据库开发中,是一个比较流行的开源框架,方便操作而且功能强大,今天来学习一下,最近的项目中也有所涉及,写个博客来 ...

随机推荐

  1. [Spring MVC]@RequestMapping 与 @RequestMapping+@RequestResponse的区别

    假定:返回格式均为JSON,JSON实体对象myJson的属性有:data.message.code.status. 二者的区别在于: @RequestMapping:会在最外层包裹 data属性,将 ...

  2. PHP读取XML文件的三种方式

    一  用  simplexml_load_file 读取xml文件 <?php $xml_array=simplexml_load_file('person.xml'); //将XML中的数据, ...

  3. Dotnet初探: 尝试使用 dotnet6 的miniapi

    引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...

  4. 如何在 .NET Core WebApi 中处理 MultipartFormDataContent

    最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码.这些地方从 .NET Framework 迁移到 .NET C ...

  5. 全平台数据(数据库)管理工具 DataCap 管理 Rainbond 上的所有数据库

    DataCap是用于数据转换.集成和可视化的集成软件,支持多种数据源.文件类型.大数据相关数据库.关系数据库.NoSQL数据库等.通过该 DataCap 可以实现对多个数据源的管理,对数据源下的数据进 ...

  6. ClickHouse主键索引最佳实践

    在本文中,我们将深入研究ClickHouse索引.我们将对此进行详细说明和讨论: ClickHouse的索引与传统的关系数据库有何不同 ClickHouse是怎样构建和使用主键稀疏索引的 ClickH ...

  7. SpringBoot SpringSecurity 介绍(基于内存的验证)

    SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘 SpringBoot已经为用户采用默认配置,只需要引入pom依赖就能快速启动Spring ...

  8. 机器学习02-(损失函数loss、梯度下降、线性回归、评估训练、模型加载、岭回归、多项式回归)

    机器学习-02 回归模型 线性回归 评估训练结果误差(metrics) 模型的保存和加载 岭回归 多项式回归 代码总结 线性回归 绘制图像,观察w0.w1.loss的变化过程 以等高线的方式绘制梯度下 ...

  9. Tomacat乱码和报错UTF-8 序列的字节 2 无效和‘application/json;charset=UTF-8‘ not supported的处理

    文章目录 前言 1. tomcat乱码的处理方法 2. applicationContext.xml报错2 字节的 UTF-8 序列的字节 2 无效 3. 报错'application/json;ch ...

  10. 【解决办法】配置banner信息时卡死/无反应,以及正确配置

    环境: 工具:锐捷EVE模拟器 远程工具:SecureCRT 系统版本:Windows 10 问题描述 描述:在配置登录 banner 提示警告信息时,将 "^" 符号放到了警告信 ...