说明:以下是我近两年年来开发中最常用的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)的更多相关文章

  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. Python操作数据库类 Oracle、Sqlserver、PostgreSQL

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

  9. mybatis 操作数据库(05)

    类型转换.动态排序,查询接口与mapper对应关系说明及其注意事项 一.MyBatis 自带写常见类型转换器.例如:java 类中 String 对应 mySQL中的varchar 二.自定义类型转换 ...

  10. Atitit  基于meta的orm,提升加速数据库相关应用的开发

    Atitit  基于meta的orm,提升加速数据库相关应用的开发 1.1. Overview概论1 1.2. Function & Feature功能特性1 1.2.1. meta api2 ...

随机推荐

  1. 基于SpringBoot实现单元测试的多种情境/方法(二)

    本文分享自天翼云开发者社区@<基于SpringBoot实现单元测试的多种情境/方法(二)>,  作者:才开始学技术的小白 1 Mock基础回顾 在上一篇分享中我们详细介绍了简单的.用moc ...

  2. [Go] 递归获取目录下的文件

    操作示例: ./scan /Document/dir 代码: // 定义递归文件树结构体 type treeList struct { Path string `json:"path&quo ...

  3. Java学习笔记14

    1.Arrays类 ​ Arrays类包含用于操作数组的各种方法(如排序和搜索).该类没有构造函数,直接使用类名.方法名()的方法调用需要的方法. 常用方法 方法 作用 public static S ...

  4. Java开发准备

    1.Java是一门面向对象的高级语言 JDK:是java development kit的缩写,意思是java程序开发的工具包. 可以用来开发Java和运行Java程序 JRE:Java Runtim ...

  5. 100026. 【NOIP2017提高A组模拟7.7】图

    题目大意: 给你n个点,每个点只有一条出路,请问每个点走了k步之后走过的权值和. 权值最小的边的权值. 考场想法: 考试时就先打了个暴力,然后发现一定会形成一个环,所以就想到了可以判环,然后 按照规律 ...

  6. 前端js几种加密/解密方法

    https://www.jianshu.com/p/4c236d83ea04 https://blog.csdn.net/guxingsheng/article/details/84451573 vu ...

  7. Win Pycharm + Airtest + 夜神模拟器 实现APP自动化

    前言: 前面已经讲过了Airtest的简单配置与使用了,相信大家已经对于操作Airtest没有什么问题了(#^.^#) 但是在Airtest IDE中编写代码是有局限性的,而且不能封装Airtest的 ...

  8. 2022年5月5日模拟赛题解与总结(ABC237)

    总结 初一第一,竞赛班第二 还可以,为了照顾提高班来的四个同学放了四个水题,可惜他们做的不是很理想,希望他们下次可以获得满意的成绩 这次做的其实是 AtCoder ABC237 A.Not Overf ...

  9. 通过Handsontable实现像Excel一样编辑数据

    ​一.Handsontable是指什么? 官网: http://handsontable.com Handsontable是一个JavaScript库,可以帮助您轻松实现类似Excel电子表格一样的编 ...

  10. 【易车网实例】x-sign逆向保姆级教程

    易车号x-sign逆向 前言 许多网站都有反爬机制,x-sign加密就是许多反爬虫机制的其中一种,本次将以易车号作为目标进行演示. 方法仅供学习参考. 链接:https://hao.yiche.com ...