使用 SqlHelper.dll 时,首先需要在项目中引用该 DLL,然后通过其封装的方法简化 SQL Server 数据库操作。以下是常见操作的 C# 示例代码:

查看SqlHelper.dll方法内容

// 替换为实际的SqlHelper.dll路径
using System.Reflection;
using Microsoft.Data.SqlClient;  //需要安装
string dllPath = @"C:\Users\zjl15\source\repos\ConsoleApp6\ClassLibrary1.dll";
​
// 2. 加载SqlHelper.dll程序集
Assembly assembly = Assembly.LoadFrom(dllPath);
​
// 3. 获取SqlHelper类(假设类名为SqlHelper,可能需要根据实际命名空间调整)
// 常见命名空间可能是SqlHelper或Microsoft.ApplicationBlocks.Data等
Type sqlHelperType = assembly.GetTypes().FirstOrDefault(t => t.Name == "SqlHelper"); // 匹配类名
​
// 4. 获取所有公共方法(包括静态方法,SqlHelper通常为静态类)
// BindingFlags指定:静态方法 + 公共方法 + 忽略继承的方法
MethodInfo[] methods = sqlHelperType.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly);
​
// 5. 遍历并输出方法信息
Console.WriteLine("SqlHelper中的方法列表:");
Console.WriteLine("----------------------------------------");
foreach (var method in methods)
{// 输出方法名Console.Write($"方法名:{method.Name}  ");
​// 输出返回类型Console.Write($"返回类型:{method.ReturnType.Name}  ");
​// 输出参数列表ParameterInfo[] parameters = method.GetParameters();if (parameters.Length > 0){Console.Write("参数:");foreach (var param in parameters){Console.Write($"{param.ParameterType.Name} {param.Name}, ");}}else{Console.Write("无参数");}
​Console.WriteLine("\n----------------------------------------");
}
​
Console.ReadKey();

1. 引用 SqlHelper.dll 并配置连接字符串

  • 在项目中右键「引用」→「添加引用」→ 浏览并选择 SqlHelper.dll

  • 在配置文件(App.config/Web.config)中添加连接字符串(同之前的配置)

  • 注意版本号

<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup> <supportedRuntime version="v8.0" sku=".NETFramework,Version=v8.0.2" /></startup><connectionStrings><add name="connString"  connectionString ="server=localhost;database=db_first;uid=sa;pwd=123456" providerName="Microsoft.Data.SqlClient"/></connectionStrings>
</configuration>

2. 常用方法示例(假设 SqlHelper 类在 SqlHelper 命名空间下)

using System;
using System.Data;
using System.Data.SqlClient;
using SqlHelper; // 引入 SqlHelper 命名空间
​
public class SqlHelperDemo
{// 连接字符串名称(与配置文件中一致)private const string ConnectionName = "DefaultConnection";
​// 1. 执行 INSERT/UPDATE/DELETE(返回受影响行数)public int ExecuteNonQueryExample(){string sql = "INSERT INTO Student (Name, Age) VALUES (@Name, @Age)";// 构建参数(防止SQL注入)SqlParameter[] parameters = {new SqlParameter("@Name", SqlDbType.NVarChar, 50) { Value = "张三" },new SqlParameter("@Age", SqlDbType.Int) { Value = 20 }};// 调用 SqlHelper 的 ExecuteNonQuery 方法return SqlHelper.ExecuteNonQuery(ConnectionName, CommandType.Text, sql, parameters);}
​// 2. 执行查询并返回单个值(如 COUNT、MAX 等)public object ExecuteScalarExample(){string sql = "SELECT COUNT(*) FROM Student WHERE Age > @Age";SqlParameter[] parameters = {new SqlParameter("@Age", SqlDbType.Int) { Value = 18 }};// 调用 SqlHelper 的 ExecuteScalar 方法return SqlHelper.ExecuteScalar(ConnectionName, CommandType.Text, sql, parameters);}
​// 3. 执行查询并返回 DataTable(适合小量数据)public DataTable ExecuteDataTableExample(){string sql = "SELECT * FROM Student WHERE Department = @Dept";SqlParameter[] parameters = {new SqlParameter("@Dept", SqlDbType.NVarChar, 50) { Value = "计算机系" }};// 调用 SqlHelper 的 ExecuteDataTable 方法return SqlHelper.ExecuteDataTable(ConnectionName, CommandType.Text, sql, parameters);}
​// 4. 执行查询并使用 SqlDataReader(适合大量数据,需手动释放资源)public void ExecuteReaderExample(){string sql = "SELECT Id, Name FROM Teacher";using (SqlDataReader reader = SqlHelper.ExecuteReader(ConnectionName, CommandType.Text, sql)){while (reader.Read()){int id = reader.GetInt32(0);string name = reader.GetString(1);Console.WriteLine($"ID: {id}, 姓名: {name}");}} // reader 会在 using 结束后自动关闭}
​// 5. 调用存储过程(带输出参数)public void ExecuteStoredProcedureExample(){// 存储过程名称string procedureName = "GetStudentCountByDept";// 输入参数 + 输出参数SqlParameter[] parameters = {new SqlParameter("@Dept", SqlDbType.NVarChar, 50) { Value = "电子系" },new SqlParameter("@Count", SqlDbType.Int) { Direction = ParameterDirection.Output }};// 执行存储过程(注意 CommandType 为 StoredProcedure)SqlHelper.ExecuteNonQuery(ConnectionName, CommandType.StoredProcedure, procedureName, parameters);// 获取输出参数值int count = (int)parameters[1].Value;Console.WriteLine($"电子系学生数量: {count}");}
}

关键说明:

  1. 方法命名规范SqlHelper.dll 的核心方法通常与上述示例一致(ExecuteNonQueryExecuteScalar 等),具体参数可能略有差异,需参考该 DLL 的文档。

  2. 参数化查询:必须使用 SqlParameter 传递参数,避免 SQL 注入风险。

  3. 资源释放:使用 SqlDataReader 时,建议用 using 语句自动释放资源。

  4. 连接字符串:通过配置文件管理,避免硬编码,方便后期修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94750.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94750.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94750.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苍穹外卖项目实战(日记十一)-记录实战教程及问题的解决方法-(day3-3)完善菜品分页查询功能

菜品分页查询 &#xff08;1&#xff09;需求分析 &#xff08;2&#xff09;代码开发分析 DTO 前端给后端 &#xff0c;VO 后端给前端&#xff1b; vo是进行页面展示&#xff0c;dto是前后端数据交互的&#xff0c;pojo是对应数据库表字段 &#xff08;3&#xff09;DishCo…

C++ 力扣 704.二分查找 基础二分查找 题解 每日一题

文章目录二分查找&#xff1a;从基础原理到代码实现二分查找的特点&#xff1a;细节是坑&#xff0c;学会是宝算法重点&#xff1a;原理不只是“有序”&#xff0c;模板要懂不要背题目描述&#xff1a;LeetCode 704. 二分查找为什么这道题值得弄懂&#xff1f;为什么可以用二分…

VLN通用评测管线设计

我来用图形化的方式清晰地展示整个多模型适配的架构和流程&#xff1a; 效果视图 #mermaid-svg-1UJ7Kg2nY4JE9Ncs {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1UJ7Kg2nY4JE9Ncs .error-icon{fill:#552222;}#merm…

aiohttp模块如何使用

aiohttp 简介aiohttp 是一个基于 Python 的异步 HTTP 客户端/服务器框架&#xff0c;构建于 asyncio 之上。它支持高性能的异步网络操作&#xff0c;适用于 Web 服务、爬虫、API 调用等场景。核心功能HTTP 客户端&#xff1a;支持异步发送 HTTP 请求&#xff0c;处理响应。HTTP…

ModuleNotFoundError: No module named ‘dbgpt_app‘

问题原因&#xff1a;这个问题的核心是Python的模块导入机制。即使能看到dbgpt_app目录&#xff0c;但Python解释器可能找不到它&#xff0c;这是因为Python需要知道去哪里查找这个模块。让我用简单的语言解释一下&#xff1a; Python的模块搜索路径 Python解释器在导入模块时&…

死锁产生的条件是什么? 如何进行死锁诊断?

1. 死锁产生的条件是什么?一个线程需要同时获取多把锁,这时就容易发生死锁2. 如何进行死锁诊断?当程序出现了死锁现象,我们可以使用jdk自带的工具:jps和jstackjps:输出JVM中运行的进程状态信息jstack:查看java进程内线程的堆栈信息,查看日志,检查是否有死锁&#xff0c;如果有…

【科研绘图系列】R语言在海洋生态学数据可视化中的应用:以浮游植物叶绿素和初级生产力为例

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍 数据准备 数据处理 叶绿素含量(Chl:C)随年龄的变化 初级生产力(NPP)随年龄的变化 数据可视化 加载R包 数据下载 导入数据 数据预处理 画图 保持图片 总结 系统信息 介绍 本教…

【Qt开发】常用控件(七)-> styleSheet

目录 1 -> 引言&#xff1a;为什么需要 Qt 样式表&#xff1f; 2 -> Qt 样式表基础 2.1 -> 什么是 Qt 样式表 2.2 -> 基本语法结构 3 -> 选择器类型 3.1 -> 通用选择器 3.2 -> 类型选择器 3.3 -> 类选择器 3.4 -> ID 选择器&#xff08;通…

linux 正则表达式学习

本篇主要学习几个正则表达式匹配符&#xff1a; ^&#xff1a;锚定行首$&#xff1a;锚定行尾\< 或者 \b&#xff1a;锚定词首\>或者 \b&#xff1a;锚定词尾\B&#xff1a;匹配”非单词边界” 下面通过实验彻底掌握&#xff1a; 测试文件内容如下&#xff1a; cat test.…

MIPS汇编快速入门 【龙芯】

一、前言&#xff1a;MIPS与龙芯的渊源 MIPS&#xff08;Microprocessor without Interlocked Pipelined Stages&#xff09;是一种经典的RISC&#xff08;精简指令集&#xff09;架构&#xff0c;以流水线高效、指令简洁、低功耗为特点。龙芯&#xff08;Loongson&#xff09;…

如何对springboot mapper 编写单元测试

如何对springboot mapper 编写单元测试在 Spring Boot 中对 MyBatis Mapper 编写单元测试的核心目标是​​隔离真实数据库依赖​​&#xff0c;验证 SQL 逻辑与数据库交互的正确性。以下是完整的实践指南&#xff0c;涵盖环境配置、测试数据初始化、具体测试用例编写及常见问题…

学习游戏制作记录(数据加密以及主菜单和画面优化)8.27

1.实现数据加密FileDataHandler 脚本&#xff1a;private bool encryptData false;//是否加密public string codeWord "alexdev";//加密码public FileDataHandler(string _dataDirPath, string _fileName, bool _encryptData){dataDirPath _dataDirPath;FileName …

五自由度磁悬浮轴承同频振动抑制:从机理拆解到传递函数验证的核心方案

摘要 五自由度磁悬浮轴承凭借无摩擦、高转速的优势,在航空航天、透平机械等领域应用广泛,但转子不平衡质量引发的同频振动(频率与转子转速一致)始终是制约其精度的核心痛点。本文从转子不平衡振动的物理机理出发,详细推导不平衡力的数学模型,分析位移输出中扰动信号的叠…

CSS 优先级:公司组织架构模型

为什么我的CSS样式不生效&#xff1f; 在网页开发中&#xff0c;你可能经常会遇到一个令人困惑的问题&#xff1a;你明明写了CSS代码&#xff0c;但是样式却不生效&#xff0c;或者出现了意想不到的冲突。你可能会反复检查代码&#xff0c;却找不到任何语法错误。这背后隐藏的原…

Go语言循环语句全解析

循环语句概述循环语句在编程中的作用循环语句是编程中控制程序流程的重要结构&#xff0c;它允许我们重复执行特定代码块&#xff0c;直到满足终止条件。在数据处理、算法实现、系统监控等场景中&#xff0c;循环都发挥着关键作用。典型应用场景&#xff1a;数据处理&#xff1…

基于NXP iMXRT600音频算法开发方法

iMXRT600 是一款高性能的微控制器&#xff0c;在开发音频算法时可按以下步骤和方法进行&#xff1a;1. 开发环境搭建硬件平台准备好 iMXRT600 开发板&#xff0c;确保开发板上具备音频输入输出接口&#xff0c;如 I2S&#xff08;Inter - IC Sound&#xff09;接口用于音频数据…

怎么理解API?

想象一下你去一家餐厅吃饭。你&#xff08;用户&#xff09;不会直接走进厨房告诉厨师怎么做菜&#xff0c;对吧&#xff1f;你会怎么做&#xff1f;你会拿起菜单&#xff0c;查看上面列出的菜品&#xff08;例如“意大利面”&#xff09;、它们的描述和价格。然后&#xff0c;…

系统架构设计师备考第7天——网络协议中间件软件构件

一、网络协议 核心概念 定义&#xff1a;网络协议是计算机通信的“语言规则”&#xff0c;规定了数据格式、传输时序、控制信号等&#xff0c;确保不同系统实体间正常通信。作用&#xff1a;实现资源共享与信息交换的基础。常见类型&#xff1a; 局域网协议&#xff08;LAN&…

《数据之心》

《数据之心》一、故障2045年&#xff0c;中国“天算”量子云中枢第七区。鱼小妖站在控制台前&#xff0c;指尖划过全息屏&#xff0c;蓝光映在她清秀的脸庞上。她的长发如墨&#xff0c;眸子却似星河&#xff0c;倒映着无数跳动的数据流。她是第七区最年轻的系统神经工程师&…

《C++ Primer 第五版》不要返回局部对象的引用或指针

1. 先看一个“看似合理”的例子#include <iostream> using namespace std;int& foo() {int x 10; // 局部变量&#xff0c;存在于栈中return x; // 返回它的引用 }int main() {int& ref foo(); // ref 绑定到了已经被销毁的 xcout << ref &…