【Sql Server】C#通过拼接代码的方式组合添加sql语句,会出现那些情况,参数化的作用

欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 语句报错
  • 报错原因
  • 参数优化
  • ADO.NET
  • 安装包
  • 链接模式
  • 参数化作用
  • 文章推荐

前言

博主写的很多博客分享,都是来源于实际开发和学习过程中遇到的一些细节问题,
因此通过文章的方式记录下来,这不仅可以边写边总结边边理解,这样也能加深印象。
本篇文章是讲,为什么要用参数化来生成sql语句?通过创建测试项目一起探索吧!

语句报错

没有进行参数化传递值,通过纯拼接方式组合的sql语句,是有可能存在一些sql语句不规范,
从而导致一些报错,比如:博主本次sql语句报错就是因为sql语句存在参数值本身还有逗号,
逗号在sql语句里又是特殊符号。
在这里插入图片描述上图报错提示,在张三附近有语法错误,这个时候如果不是具体分析sql语句,但从错误提示是看不出什么原因。

在这里插入代码片

报错原因

通过调试和查看sql语句,观察可以看到,在赋值时,如果粗心大意的话,是很容易多写了一次单引号
在这里插入图片描述

参数优化

基于上面错误,如果赋值确实需要带上单引号进行查询,那么就需要通过参数化的方式。
添加一条记录测试,具体创建表可以在文章后面查看相关链接

declare @agent_name nvarchar(50)
set @agent_name='''张三'''insert into test_name(city_name,area_name,agent_name)
values('深圳市','龙岗区',@agent_name)

从下图可以看到,使用参数化可以传递单引号值,也不会引发sql语句报错在这里插入图片描述

ADO.NET

在 C# 的 ADO.NET 中,以下是一些基本的类及其主要作用:

1.SqlConnection
用于建立与 SQL Server 数据库的连接。

2.SqlCommand
用于执行 SQL 语句或存储过程,并返回受影响的行数、结果集或标量值。

3.SqlDataAdapter
用于从数据库中读取数据,并填充到 DataSet 或 DataTable 中。
可以直接执行sql语句,如果没有where条件或者参数化时

4.DataSet
本身不包含数据,但是可以包含一个或多个 DataTable ,以及它们之间的关系。

5.DataTable
表示内存中的表格,包含多个 DataRow,一行表示一条记录,包含多个列(字段)。

6.DataRow
表示 DataTable 中的一行数据,通过列名或索引访问数据。

安装包

和十年前VS开发工具相比,现在VS版本越来越智能化,会自动识别进行包的安装,非常方便和高效。在这里插入图片描述

链接模式

C# ADO.NET 链接字符串两种模式,一个是要账号密码,一种是不需要账号密码。
在 C# 中使用 ADO.NET 连接数据库时,连接字符串通常包含数据库连接所需的信息。
如果采用 Windows 身份验证方式连接数据库,连接字符串通常不需要包含明确的用户名和密码,因为它会使用当前 Windows 用户的身份验证信息。这就是 “Windows 身份验证” 模式。
下面是一个使用 Windows 身份验证的连接字符串示例:

string connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;Integrated Security=True;";

如果使用的是 SQL Server 身份验证方式连接数据库,那么连接字符串需要包含用户名和密码信息。
下面是一个使用 SQL Server 身份验证的连接字符串示例:

string connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password;";

参数化作用

通过上面代码分析,参数化的其中一个作用,能够规范化进行传参,避免和sql本身有重复的值。
除了这个作用外,还有其他作用,比如:

1.预防 SQL 注入攻击
通过使用参数化查询,可以确保用户输入的数据不会被误解为 SQL 代码的一部分,从而有效地防止 SQL 注入攻击。因为参数化查询会将用户输入的数据作为数值或文本来处理,而不是作为可执行的 SQL 代码。

2.提高代码可读性和可维护性
使用参数化查询可以将 SQL 查询语句与参数值分离开来,使代码更清晰易懂。这样的设计有助于提高代码的可读性和可维护性,减少了混杂在一起的 SQL 代码和参数值所带来的混乱。

3.提高执行效率
数据库服务器通常会对参数化查询进行缓存和优化,因此可以提高查询的执行效率。通过将参数化查询参数化,数据库可以更好地重复使用预编译的查询计划,从而减少了解析和编译 SQL 查询语句的开销。

4.避免数据类型问题
使用参数化查询可以根据参数的数据类型来正确地将参数值传递给数据库,避免了在某些情况下需要手动对数据进行类型转换的问题。

文章推荐

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

【数据库】Sql Server数据迁移,处理自增字段赋值

【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

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

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

相关文章

JavaWeb JSP

JSP(Java Server Page)是J2EE的功能模块,是Java服务器页面,由Web服务器执行,作用就是降低动态网页开发难度,将Java代码与HTML分离,降低开发难度,本质就是Servlet。 Servlet的缺点&a…

pandas数据分析42——读取和写入stata和spss的数据格式

python就是胶水语言,啥文件基本都能读取,而且pandas作为数据分析最好用的包,其功能自然也很多,可以读取各种数据文件。 本次就来演示一下怎么读取stata文件,和spss文件,他们不仅储存了数据和变量&#xff…

C++--机器人的运动范围

目录 1. 题目 2. 思路 3. C代码测试 4. 测试结果 1. 题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格…

如何应对IT服务交付中的问题?

如何应对IT服务交付中的问题? 按需交付服务的挑战IT服务体系的复杂性恶性循环的形成学会洞察的重要性书籍简介参与方式 按需交付服务的挑战 一致性、可靠性、安全性、隐私性和成本效益的平衡:成功的按需交付服务需要满足这些要求,这需要服务…

html样式排版

<template><div class"box"><div class"header">头部</div><div class"main"><div class"left">菜单</div><div class"right"><div class"right-contentr"&g…

【C++】list模拟实现+反向迭代器

list模拟实现 list定义list用法list iterator的使用begin() end()rbegin()rend() reverse()sort()merge()unique()remove()splice() list模拟实现struct和class的区别list三个类模板默认成员函数构造函数拷贝构造函数赋值运算符重载析构函数 数据修改操作push_back()push_fron…

正信法律:借了钱找不到人怎么办

当一个人借出钱财之后&#xff0c;发现借款人像蒸发了一般无影无踪&#xff0c;这无疑是一件让人头疼的事情。面对这种情况&#xff0c;我们需要采取明智的措施来保护自己的权益。 尽量联络借款人。可以通过电话、短信、电子邮件或社交媒体尝试联系&#xff0c;同时也可以询问共…

界面控件DevExpress WinForms 2024产品路线图预览(一)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

excel数值无法左对齐

右键&#xff0c;单元格格式 修改为常规 解决

【力扣精选算法100道】——判定是否互为字符重排(哈希专题)

目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 第一种&#xff1a;排序 第二种方法&#xff1a;哈希 &#x1f6a9;实现代码 面试题 01.02. 判定是否互为字符重排 - 力扣&#xff08;LeetCode&#xff09; &#x1f6a9;了解题意 我们输入俩个字符串&#xff0c;当俩…

张雨霏同款食谱火了,冠军的健康饮食秘密被发现了

2024新一届奥运年到来之际&#xff0c;厨电集成灶领军品牌的森歌突然爆出要“让全民吃到‘冠军’餐”&#xff0c;一时让业界震惊&#xff0c;也让有集成灶消费欲求的消费者感到惊喜。 森歌集成灶的这个“豪言壮语”是来源于森歌联合国家体育总局训练局共同启动的“2024森歌冠…

jquery 后台返回的单选框按照两列展示

jquery代码 <!DOCTYPE html> <html><head><!-- <meta charset"GBK"> --><meta charset"UTF-8"><title></title></head><form><body><table id"myTable"> <tbody …

代码随想录算法训练营Day37 | LeetCode738.单调递增的数字、LeetCode968.监控二叉树、贪心算法总结

LeetCode738.单调递增的数字 思路&#xff1a;与分糖果的题目同理&#xff0c;因为需要与前一位数比较&#xff0c;并且修改这两个数&#xff0c;因此需要从后往前遍历&#xff0c;当前一位数比当前数大时&#xff0c;则前一个数-1&#xff0c;后一个数变为9。 代码细节&…

【C++从0到王者】第四十七站:最小生成树

文章目录 一、最小生成树的概念1.概念2.最小生成树的构造方法 二、Kruskal算法1.算法思想2.代码实现 三、Prim算法1.算法思想2.代码实现3.试试所有节点为起始点 一、最小生成树的概念 1.概念 连通图&#xff1a;在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则…

设计模式:工厂模式 ⑤

一、思想 工厂模式&#xff1a;一个中介作用&#xff0c;在创建对象的时候。 主要作用&#xff1a;屏蔽对象创建过程&#xff0c;减少上层关注度&#xff0c;解耦并且内部方法可做更多扩展增强的处理。(比如使用映射消除if代码&#xff0c;存在多个同类对象需要抽象策略处理的时…

蓝桥杯练习系统(算法训练)ALGO-988 逗志芃的危机

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 逗志芃又一次面临了危机。逗志芃的妹子是个聪明绝顶的人&#xff0c;相比之下逗志芃就很菜了。现在她妹子要和他玩一个游戏…

express+mysql+vue,从零搭建一个商城管理系统8--文件上传,大文件分片上传

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、安装multer&#xff0c;fs-extra二、新建config/upload.js三、新建routes/upload.js四、修改routes下的index.js五、修改index.js六、新建上传文件test.html七、开启jwt验证token&#xff0c;通过login接…

java核心面试题汇总

文章目录 1. Java1.1. TCP三次握手/四次挥手1.2 HashMap底层原理1.3 Java常见IO模型1.4 线程与线程池工作原理1.5 讲一讲ThreadLocal、Synchronized、volatile底层原理1.6 了解AQS底层原理吗 2. MySQL2.1 MySQL索引为何不采用红黑树&#xff0c;而选择B树2.2 MySQL索引为何不采…

JVM(类加载机制)

类加载就是 .class 文件, 从文件(硬盘) 被加载到内存(元数据区)中的过程 类加载的过程 加载: 找 .class 文件的过程, 打开文件, 读文件, 把文件读到内存中 验证: 检查 .class 文件的格式是否正确 .class 是一个二进制文件, 其格式有严格的说明 准备: 给类对象分配内存空间 (先在…

【C++干货基地】面向对象核心概念 | 访问限定符 | 类域 | 实例化 | 类对象模型

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…