基于C# 开发的SOL SERVER 操作数据库类(SQLHelp)
说明:以下是我近两年年来开发中最常用的C#操作sql server数据库访问类,对初学者非常有用,容易扩展,支持多库操作,多研究研究,有什么问题欢迎留言
当前环境为 C# .NET CORE 3.0
首先在appsettings.json文件中配置日志保存路径,MSSQL 数据库连接串,可以配置多个,也可以在launchSettings.json文件中配置,编写相应的代码,可采用注入方式调用,也可写作基本类调用,当前演示基本类操作
示例:
代码:


"AllowedHosts": "*",
"ConnectionStrings": {
"SqlHost": "IP",
"SqlAdminName": "账号",
"SqlAdminPswd": "密码",
"SqlCatalogProFix": "数据库"
},
"ConnectionStrings2": {
"SqlHost": "IP",
"SqlAdminName": "账号",
"SqlAdminPswd": "密码",
"SqlCatalogProFix": "数据库"
},
"Executionlog": "", //系统执行日志路劲
"UPFilepath": "", //图片上传路径
"DWFilepath": {
"Ptpip": "http://",
"Ftpport": "端口"
}
然后新建一个SQLHelp类,如果是分层架构,则在DLL接口后面添加SQLHelp层,由Service层调用,简单开发流程为:API接口→SQLHelp类,在API程序里面使用 SQLHelp ht = new SQLHelp();语法即可在下面的程序中调用,如果是分层架构:
分层的程序一般为三层或三层以上,如三层架构:UI→API→BLL→DLL→Model,像我自己常用的,则为:UI→API→BLL→IService→Service→DL基类,如SQLSuggger/EF/SQLHelp,这里演示为最简单的:
调用代码:


using CommAPP.HelpDoc;
using EvaluationSystem.Gettoken;
using EvaluationSystem.HelpTool;
using EvaluationSystem.HelpTool.SysHelp;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks; namespace EvaluationSystem.Controllers.WMSShipment
{
/// <summary>
///曾经沧海难为水 除却巫山不是云
///取次花丛懒回顾 半缘修道半缘君
/// --Hilton 基础信息接口
/// 所有方法必须再次检测用户是否存在,若不存在则跳出action(方法),不允许执行任何操作,防止网站被攻击,数据泄露或被破坏,在进程序前已由JWT拦截校验,相关技术自己去了解
/// </summary> //[MyNoAuthentication] //不启用验证 public class ****Controller : Controller
{
public IActionResult Index()
{
return View();
}
SQLHelp ht = new SQLHelp();
SYSHelpTool st = new SYSHelpTool(); [HttpPost]
public dynamic ****data([FromBody] dynamic Rdata)//添加
{
var outData = new Dictionary<string, object>();
try
{
string jsondata = Rdata.ToString();
var dict1 = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsondata);
string data = dict1.ContainsKey("data") ? dict1["data"].ToString() : "";
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(data);
string CreateUserID = HttpContext.Request.Headers["*****"].ToString() ?? "";
CreateUserID = st.CommonAESDecrypt(CreateUserID); //登录用户 string PackageNo = dict.ContainsKey("PackageNo") ? dict["PackageNo"].ToString() : "";
string PackageTypeID = dict.ContainsKey("PackageTypeID") ? dict["PackageTypeID"].ToString() : "";
string PackageName = dict.ContainsKey("PackageName") ? dict["PackageName"].ToString() : "";
string PackageSize = dict.ContainsKey("PackageSize") ? dict["PackageSize"].ToString() : "";
string PackageQty = dict.ContainsKey("PackageQty") ? dict["PackageQty"].ToString() : "0";
string Standardcost = dict.ContainsKey("Standardcost") ? dict["Standardcost"].ToString() : "0";
string LotStatus = dict.ContainsKey("LotStatus") ? dict["LotStatus"].ToString() : "1";
string StockID = dict.ContainsKey("StockID") ? dict["StockID"].ToString() : ""; if (string.IsNullOrWhiteSpace(CreateUserID))
{
outData = new Dictionary<string, object>
{
{ "return_data","" },
{ "return_codes", "-1" },
{ "return_msg", "用户有误!" }
};
return outData;
}
if (string.IsNullOrWhiteSpace(PackageNo))
{
outData = new Dictionary<string, object>
{
{ "return_data","" },
{ "return_codes", "-1" },
{ "return_msg", "耗材编码为空!" }
};
return outData;
} string upsql = "SQL语句*****WHERE PackageNo=@PackageNo";
Dictionary<string, object> dic2 = new Dictionary<string, object>(); dic2.Add("PackageNo", 表名);
DataTable ds = ht.SelectT(dic2, upsql);
var Ispectdatas1 = ht.QueryData(ds); if (Ispectdatas1.Count > 0)
{
outData = new Dictionary<string, object>
{
{ "return_data","" },
{ "return_codes", "-1" },
{ "return_msg", "已存在*****,请勿重复添加!" }
};
return outData;
} Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("PackageNo", PackageNo);
dic.Add("PackageTypeID", PackageTypeID);
dic.Add("PackageName", PackageName);
dic.Add("PackageSize", PackageSize);
dic.Add("Standardcost", Standardcost);
dic.Add("PackageQty", PackageQty);
dic.Add("LotStatus", LotStatus);
dic.Add("StockID", StockID);
dic.Add("ModifyUserID", CreateUserID);
dic.Add("ModifyDate", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
dic.Add("CreateUserID", CreateUserID); DataTable dt = new DataTable();
dt = ht.AddDataTable(dic, "PackageInfo");
var Ispectdatas2 = ht.QueryData(dt);
if (Ispectdatas2.Count > 0)
{
outData = new Dictionary<string, object>
{
{ "return_data",""},
{ "return_codes", "0" },
{ "return_msg", "添加成功!" }
};
}
else
{
outData = new Dictionary<string, object>
{
{ "return_data",""},
{ "return_codes", "0" },
{ "return_msg", "添加失败!" }
};
} }
catch (Exception ex)
{
outData = new Dictionary<string, object>
{
{ "return_data","" },
{ "return_codes", "-2" },
{ "return_msg", "添加失败,系统错误!"}
};
}
return outData;
} }
如果是多层架构,则如下:
本章介绍SQL Help类的使用,下一章介绍SQL Help基类的编写
今日分享结束
能帮朋友解决问题的记得给个关注支持一下,以后将多多分享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 ...
- Python操作数据库类 Oracle、Sqlserver、PostgreSQL
我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面. 下面是我使用到的访问数据库(Oracle.Sqlserver.PostgreSQL)的公共类. 一.Oracl ...
- mybatis 操作数据库(05)
类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...
- Atitit 基于meta的orm,提升加速数据库相关应用的开发
Atitit 基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...
随机推荐
- [大数据]sqoop安装与运用
1 文由 项目使用场景:OLTP Oracle 数据导入到 OLAP HIVE 2 Sqoop简述 Apache Sqoop(TM) 是一款开源的ETL工具,设计用于在 Apache Hadoop和结 ...
- 【题解】Luogu P2671 【求和】
因为人傻常数大写了一天的题目. 原题传送门 题目意思另一种表达: 定义特殊二元组\((x,z)\). 1.\(x<z\). 2.\(x\)与\(z\)要么都为奇数要么都为偶数. (即\(x \ ...
- mariabackup -prepare step on increment backup failed
问题描述:使用mariabackup对maridb10.6.4进行物理备份,进行增量恢复的时候报错.截止到目前,还是mariadb的一个bug,还没有修复.在增备的过程中如果出现新库的建立,数据库就会 ...
- Tmux 使用教程
本文转载自阮一峰老师的博客文章<Tmux 使用教程>,感谢阮老师! Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具. 本文介绍如何使用 ...
- 2021年蓝桥杯python真题-路径(数论+动态规划)(LCM、GCD和DP详细介绍)干货满满~
欢迎大家阅读本文章 如果大家对LCM和GCD不是很熟悉,这篇文章将对你有帮助! 本文章也会把动态规划做一定的介绍 题目: GCD和LCM的讲解: GCD的实现-辗转相除法: 在数学中,辗转相除法,又称 ...
- element-ui Table 表格行间隔及行边框效果
<el-table :data="tableData" style="width: 100%" :cell-class-name="tableC ...
- 聊一聊 GDB 调试程序时的几个实用命令
一:背景 1. 讲故事 用惯了宇宙第一的 Visual Studio 再用其他的开发工具还是有一点不习惯,不习惯在于想用的命令或者面板找不到,总的来说还是各有千秋吧,今天我们来聊一下几个在调试中比较实 ...
- 2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存。
2023-02-22:请用go语言调用ffmpeg,保存mp4文件的视频帧,每帧用ppm图片保存. 答案2023-02-22: 使用 github.com/moonfdd/ffmpeg-go 库. 先 ...
- 2022-08-18:每一个序列都是[a,b]的形式,a < b 序列连接的方式为,前一个序列的b,要等于后一个序列的a 比如 : [3, 7]、[7, 13]、[13, 26]这三个序列就可以依次连
2022-08-18:每一个序列都是[a,b]的形式,a < b 序列连接的方式为,前一个序列的b,要等于后一个序列的a 比如 : [3, 7].[7, 13].[13, 26]这三个序列就可以 ...
- 2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对。返回逆序对个数。
2021-03-08:在一个数组中,任何一个前面的数a,和任何一个后面的数b,如果(a,b)是降序的,就称为逆序对.返回逆序对个数. 福哥答案2021-03-08: 1.归并排序,从右往左,相等拷右. ...