续上一节,本节给出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. Gartner最新报告,分析超大规模边缘解决方案

    当下,酝酿能量的超级边缘. 最近,我们在谈视频化狂飙.谈AIGC颠覆.谈算力动能不足,很少谈及边缘.但"边缘"恰恰与这一切相关,且越发密不可分,它是未来技术发展的极大影响因子. & ...

  2. Redis源码之SDS简单动态字符串

    Redis 是内存数据库,高效使用内存对 Redis 的实现来说非常重要. 看一下,Redis 中针对字符串结构针对内存使用效率做的设计优化. 一.SDS的结构 c语言没有string类型,本质是ch ...

  3. 部署:windows7下mysql8.0.18部署安装

    一.前期准备(windows7+mysql-8.0.18-winx64) 1.下载地址:https://dev.mysql.com/downloads/ 2.选择直接下载不登录账号,下载的压缩包大概两 ...

  4. macOS下安装 n 管理包(node版本管理工具)

    1. 安装 n 管理包 终端命令全局安装 npm install -g n 安装成功后在终端输入 n --version 或 n 查看,可看到 n 的默认安装目录 下面就是使用 n 的方式了, 首先查 ...

  5. Go函数基础

    在Go语言中,函数是一种基本的代码组织方式.函数能够接受输入参数并返回结果.Go语言中的函数有以下特点: 函数定义使用关键字func,后跟函数名.参数列表和返回值类型. 如果函数有返回值,则在函数定义 ...

  6. 音视频八股文(9)-- flv的h264六层结构和aac六层结构

    flv介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的⾳视频⽂件体积⼩.封装简单等特点,⾮常适合于互联⽹上使⽤.⽬前主流的视频⽹站基本都⽀持FLV.采⽤FLV ...

  7. 2023-04-05:做甜点需要购买配料,目前共有n种基料和m种配料可供选购。 制作甜点需要遵循以下几条规则: 必须选择1种基料;可以添加0种、1种或多种配料,每种类型的配料最多添加2份, 给定长度为

    2023-04-05:做甜点需要购买配料,目前共有n种基料和m种配料可供选购. 制作甜点需要遵循以下几条规则: 必须选择1种基料:可以添加0种.1种或多种配料,每种类型的配料最多添加2份, 给定长度为 ...

  8. 2022-06-22:golang选择题,以下golang代码输出什么?A:3;B:1;C:4;D:编译失败。 package main import ( “fmt“ ) func mai

    2022-06-22:golang选择题,以下golang代码输出什么?A:3:B:1:C:4:D:编译失败. package main import ( "fmt" ) func ...

  9. 2022-02-26:k8s安装swagger,yaml如何写?

    2022-02-26:k8s安装swagger,yaml如何写? 答案2022-02-26: yaml如下: apiVersion: apps/v1 kind: Deployment metadata ...

  10. 都说DevOps落地难,到底难在哪里?也许你还没找到套路

    当你打开这篇文章的时候,也许你也在为DevOps的落地而苦恼,也许你的组织正在尝试DevOps转型,作为一线的实践者,说说我对这个"落地难"的看法,欢迎交流不同看法- DevOps ...