说明:以下是我近两年年来开发中最常用的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. Spring Initailizr(项目初始化向导)

    本地创建 官网创建版 在Spring官网https://start.spring.io/ 中选择 此时这个项目以压缩包形式下载到本地文件中,然后解压,导入IDEA中 阿里start创建 如果国外的网址 ...

  2. 派生,super 多态与多态性 组合

    派生的方法与重用: 方法一:指名道姓的调用某一类函数 >>> class Teacher(People): ... def __init__(self,name,sex,age,ti ...

  3. day90:luffy:基于vue+drf的路飞学城项目前端部署

    目录 1.域名备案 2.域名解析 3.设置安全组 4.部署架构图 5.一些准备工作 6.docker 7.把前端项目通过nginx容器来运行 后端部署传送门:基于vue+drf的路飞学城项目后端部署 ...

  4. SQL Case条件判断语句

    问题描述:在表中取到一些值做出判断,配合监控监测一些表中的数据.使用select case when if 来做条件查询判断 CASE 表达式遍历条件并在满足第一个条件时返回一个值(类似于 if-th ...

  5. 2023 年十大 API 管理趋势

    本文探讨了 API 管理在数字化转型中的重要性,以及 API 管理面临的挑战和发展机遇.文章重点介绍了十大 API 管理发展趋势,包括 API 安全性.API 标准化.云端 API 管理解决方案.低代 ...

  6. C# 从0到实战 命名空间

    什么是命名空间 命名空间是C#为了解决类名冲突而产生的一种方案,通过特定的前缀来标识一个类,使得编程者可以在自己的命名空间中自由使用各种类名,这很类似于Java中的包. 一般新手学习C#都会使用一个 ...

  7. 3520. 【NOIP2013模拟11.7B组】原根(math)

    题目: 考试想法: 考试的时候觉得这些数学公式太恶心了,所以就直接跳过了. 正解: 直接暴力模拟就可以了. 代码: #include<bits/stdc++.h> using namesp ...

  8. [SDR] GNU Radio 系列教程(十四) —— GNU Radio 低阶到高阶用法的分水岭 ZMQ 的使用详解

    目录 1.前言 2.ZMQ 块的类型 3.ZMQ 块的使用 4.DEMO 4.1 同一台电脑上的两个流程图 4.2 不同电脑上的两个流程图 4.3 作为 REQ/REP 服务器的 Python 程序 ...

  9. Hugging News #0428: HuggingChat 来啦

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  10. 张量(Tensor)、标量(scalar)、向量(vector)、矩阵(matrix)

    张量(Tensor):Tensor = multi-dimensional array of numbers 张量是一个多维数组,它是标量,向量,矩阵的高维扩展 ,是一个数据容器,张量是矩阵向任意维度 ...