
ADO.NET
C#有关ADO.NET的内容都在这里啦,很齐全
陆老师Peter
高校计算机专业教师、项目经理、软件研发负责人。
展开
-
空值问题(1)——C#中的HasValue 判断可空类型是否有值
HasValue返回的结果是bool类型。只可以用来判断,判断可空类型是否有除了null以外的值,有则返回true,否则就返回 false 。1. int? testValue1;testValue=2;testValue=null如果testValue的值为整数,则结果为true ,反之则为false 。引申:NULL 和空的区别:NULL不占用任何...原创 2019-07-10 17:58:11 · 10462 阅读 · 0 评论 -
数据库开发及ADO.NET(42)——弱类型DataSet的缺点、VS自动生成强类型DataSet、强类型强在哪、更新DataSet
一、弱类型DataSet的缺点1、只能通过列名引用,dataset.Tables[0].Rows[0][“Age”],如果写错了列名编译时不会发现错误,因此开发时必须要记着列名。2、int age = Convert.ToInt32(dataset.Rows[0][“Age”]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错。3、将DataSet...原创 2019-09-02 00:04:07 · 298 阅读 · 0 评论 -
数据库开发及ADO.NET(41)——可空数据类型
1、C#中值类型(int、Guid、bool等)是不可以为空的,int i=null是错误的,因此int、bool等这些类型不能表示数据库中的“Null” 。因此C#提供了“可空类型”这种语法,只要在类型后加?就构成了可空的数据类型,比如int?、bool?,这样int? i=null 就可以了。解决数据库中int可以为null,而C#中int不能为null的问题。2、判断可空类型是否为空,i...原创 2019-09-02 00:03:41 · 372 阅读 · 0 评论 -
数据库开发及ADO.NET(40)——DataSet的更新
1、可以:更新行row["Name"] = "lrj"、 删除行datatable.Rows.Remove()、 新增行datatable. NewRow()。这一切都是修改的内存中的DataSet,没有修改数据库。2、可以调用SqlDataAdapter的Update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、Data...原创 2019-09-02 00:03:21 · 218 阅读 · 0 评论 -
数据库开发及ADO.NET(39)——SQLHelper
1、封装一个SQLHelper类方便使用,提供ExecuteDataTable(string sql,params SqlParameter[] parameters)、ExecuteNonQuery(string sql,params SqlParameter[] parameters)、ExecuteScalar(string sql,params SqlParameter[] p...原创 2019-09-02 00:02:51 · 146 阅读 · 0 评论 -
数据库开发及ADO.NET(38)——SqlDataAdapter&数据集-查询多行、DataSet
二、DataSet1、SqlDataReader是连接相关的, SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。2、SqlDataReader对于小数据量的数据来说带来的只有...原创 2019-09-02 00:02:33 · 326 阅读 · 0 评论 -
数据库开发及ADO.NET(37)——SQL注入漏洞攻击、查询参数、App.Config
一、SQL注入漏洞攻击1、登录判断:select * from T_Users where UserName=... and Password=...,将参数拼到SQL语句中。2、构造恶意的Password:' or '1'='1if (reader.Read()){ Console.WriteLine("登录成功");}else { Console.Writ...原创 2019-09-02 00:02:18 · 252 阅读 · 0 评论 -
数据库开发及ADO.NET(36)——SqlCommand-执行增删改、查
一、SqlCommand-执行增删改:SqlCommand表示向服务器提交的一个命令(SQL语句等) , CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等)。ExecuteNonQuery返回值是执行的影响行数。1、执行简单的Insert语句:using (SqlCommand cmd...原创 2019-09-02 00:02:03 · 419 阅读 · 0 评论 -
数据库开发及ADO.NET(35)——连接SQLServer
一、连接SQLServer(SqlConnection)1、先来看个例子:问题:那怎样才能搭起这座通道呢?需要哪些信息?二、连接SQLServer(Connection)2、连接字符串:程序通过连接字符串,指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。3、项目内嵌mdf文件形式的连接字符串 "DataSource=.\SQLEXPRESS;AttachD...原创 2019-09-01 15:31:56 · 675 阅读 · 0 评论 -
数据库开发及ADO.NET(34)——ADO.Net基础、可能遇到的错误
一、ADO.Net基础1、直接在项目中内嵌mdf文件的方式使用SQLServer数据库(新建→数据→基于服务的数据库)。mdf文件随着项目走,用起来方便,和在数据库服务器上创建数据库没什么区别,运行的时候会自动附加(Attach) 。2、双击mdf文件会在“服务器资源管理器”中打开,管理方式和在Management Studio没有什么本质不同。要拷贝mdf文件需要关闭所有指向mdf文件的...原创 2019-09-01 13:36:39 · 244 阅读 · 1 评论 -
数据库开发及ADO.NET(33)——为什么要学习ADO.NET、ADO.NET的组成(重点)
一、为什么要学习ADO.NET1、先来看个例子:问题是,程序怎么和数据库打交道的呢?数据库储存了已注册QQ的用户信息。用户登录时程序在做什么事情?ADO.NET的作用:(1)程序要和数据库交互要通过ADO.Net 进行。(2)通过ADO.Net就能在程序中执行SQL了。(3)ADO.Net中提供了对各种不同数据库的统一操作接口。二、ADO.NET的组成2...原创 2019-09-01 12:31:40 · 347 阅读 · 0 评论 -
数据库开发及ADO.NET(32)——数据库汇总
1、数据库有哪些基本操作?建库 建表 加约束(外键约束/检查约束)2、基本的数据操纵语句有哪些?语法是?增(INSERT) 删(DELETE) 改(UPDATE) 查(SELECT)3、常用的聚合函数有哪些?Count(),sum(),max(),min(),avg()4、表连接分为哪几种类型?Inner join/ left join/full join/...原创 2019-09-01 01:06:30 · 186 阅读 · 0 评论 -
数据库开发及ADO.NET(31)——触发器
1、触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。2、一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。3、触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。4、那究竟何为触发器?在SQL Server里面也就是对某...原创 2019-09-01 00:38:38 · 295 阅读 · 0 评论 -
数据库开发及ADO.NET(30)——存储过程、系统存储过程、创建存储过程(编写分页存储过程)、编写存储过程、调用带参数的存储过程、存储过程中使用输出参数
一、存储过程1、存储过程---就像数据库中运行方法(函数)。2、和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。3、前面学的if else/while/变量 等,都可以在存储过程中使用。4、优点:执行速度更快:在数据库中保存的存储过程语句都是编译过的,运行时无需再次编译。 允许模块化程序设计:类似方法的复用。 提高系统安全性:防止SQL注入。 减少网络...原创 2019-09-01 00:18:00 · 298 阅读 · 0 评论 -
数据库开发及ADO.NET(29)——事务-为什么需要事务
一、为什么需要事务1、如,借钱问题:假定钱从A转到B,至少需要两步:A的资金减少;然后B的资金相应增加。数据:CREATE TABLE bank( uName CHAR(10), --姓名 uMoney MONEY --当前余额)GOALTER TABLE bank ADD CONSTRAINT CK_nowMoney ...原创 2019-09-01 00:17:46 · 148 阅读 · 0 评论 -
数据库开发及ADO.NET(43)——增加新的SQL语句、TypedDataSet、强类型DataSet其他(面试:如何优化访问数据库的效率)
一、增加新的SQL语句1、设计器的Adapter中点右键,选择“添加查询”→“使用SQL语句”,就可以添加多种类型的SQL语句。如果是“SELECT(返回行)”则SQL语句的列必须是对应DataSet类的父集合,生成两个方法:FillBy*和GetBy*,方法名根据查询语句的意义定,比如FillByAge,FillBy是将结果填充到现有DataSet,GetBy是将结果以DataSet方式返回...原创 2019-09-02 00:04:18 · 194 阅读 · 0 评论 -
数据库开发及ADO.NET(44)——数据绑定、探究(面试常考)
一、数据绑定1、DataGridView绑定。拖放TableAdapter、DataSet、bindingSource,将bindingSource的DataSource设定为DataSet,设定DataMember属性,然后DataGridView绑定到bindingSource。在Load的时候调用TableAdapter的Fill方法将数据填充到DataSet。绑定:双方能同步感知对方的...原创 2019-09-02 00:20:58 · 314 阅读 · 0 评论 -
数据库开发及ADO.NET(45)——RDLC报表
一、什么是报表1、什么是报表:“报表=多样的格式+动态的数据” 人们利用计算机处理数据和界面设计的功能来生成、展示报表。实现报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离。2、报表工具:(1)水晶报表(微软从其他厂商引入的报表工具)。(2)RDLC(微软自己开发的报表工具)(3)其它。如:Grid++Report 等。二、什么是RDLC...原创 2019-09-02 10:59:13 · 811 阅读 · 0 评论 -
数据库开发及ADO.NET(57)——如何在程序中访问Access写相对路径
如何在程序中访问Access写相对路径 :1、OleDbConnection的连接字符串必须是绝对路径,ADO.Net提供了一个“特殊字符串” DataDirectory表示“数据库文件夹”,如果是Winform程序DataDirectory表示当前运行的exe的文件夹,对于ASP.Net程序DataDirectory表示当前项目的App_data文件夹。2、程序中的很多文件默认是不...原创 2019-09-04 23:30:52 · 341 阅读 · 0 评论 -
多态和接口(8)——接口编程案例:配置提供者(SettingsProvider框架)。数据库配置提供者。FileSettingsProvider。提取数据库配置提供者抽象类
一、接口编程案例:配置提供者(SettingsProvider框架)1、FTP地址、用户名、密码要保存到一个地方,配置提供者就提供了一个保存、读取配置的一些类。2、数据配置提供者接口:public interface ISettingsProvider{ string this[string name] { get; set; }//以字符串类型读取、设置...原创 2019-09-03 23:15:24 · 174 阅读 · 0 评论 -
多态和接口(6)——回首ADO.Net
1、SqlCommand cmd = new SqlCommand()SqlCommand cmd = conn.CreateCommand()IDbCommand cmd = conn.CreateCommand()第三种写法最好。SQLServer、Access(文件型数据库,连接字符串用VS“服务器资源管理器”生成)的Command分别是SqlCommand、OleDbComma...原创 2019-09-03 12:23:16 · 148 阅读 · 0 评论 -
数据库开发及ADO.NET(56)——SQLServer安全设置
1、SQLServer是一个没有界面的后台服务,可以通过ADO.Net连接SQLServer执行CreateTable、Update语句操作数据库,ManagementStudio是一个管理客户端,通过它连接SQLServer就可以用图形化的方式操作数据库。2、访问数据库必须是通过验证的,否则不安全。用ManagementStudio 以Windows身份验证方式登录数据库;在数据库根节点(....原创 2019-09-03 01:49:28 · 322 阅读 · 0 评论 -
数据库开发及ADO.NET(55)——ADO.NET汇总
1.(1)控制台应用程序。(2)winform应用程序。(3)webform程序。(4)ASP.NET2.删除:(1)物理删除。(2)软删除:查正常数据和已被删除数据时用到。逻辑删除,数据还在,只是给数据表添加了一列,已经删除的行此列为true,没删除的行此列为false。3.(1)在数据库中调用存储过程:execute 过程名 参数(2)在程序中调用存...原创 2019-09-03 00:12:54 · 151 阅读 · 0 评论 -
数据库开发及ADO.NET(54)——数据库优化经验
数据库优化的目标无非是避免磁盘I/O瓶颈、减少CPU利用率和减少资源竞争。1、 在业务密集的SQL当中尽量不采用IN操作符2、 不使用not in 因为它不能应用表的索引。用not exists 或(外连接+判断为空)代替3、 不使用<>,因为用它只会产生全表扫描。(a<>0改为a>0 or a<0)4、 不使用 is null 或 is not ...原创 2019-09-02 11:54:59 · 148 阅读 · 0 评论 -
数据库开发及ADO.NET(53)——补充触发器
一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的...原创 2019-09-02 11:53:46 · 157 阅读 · 0 评论 -
数据库开发及ADO.NET(52)——最快的分页存储过程 50W数据查询76
过程一:select top N条记录 * from 文章表 where id not in(select top M条记录 id from 文章表 order by id desc ) order by id desc过程二:select top N条记录 * from 文章表 where id <(select min(id) from (select top M条记录 id f...原创 2019-09-02 11:51:59 · 163 阅读 · 0 评论 -
数据库开发及ADO.NET(51)——信息架构视图_INFORMATION_SCHEMA
information_schema数据库表说明:--获取SimpleArticle数据库中所有的表信息select * from SimpleArticle.INFORMATION_SCHEMA.TABLESSCHEMATA表:提供了当前实例中所有数据库的信息。是show databases的结果取之此表。TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于...原创 2019-09-02 11:50:28 · 141 阅读 · 0 评论 -
数据库开发及ADO.NET(50)——系统视图_sysobjects
sysobjects在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。 列名 数据类型 描述 name sysname 对象名。 Id int 对象标识号。 xtyp...原创 2019-09-02 11:49:14 · 127 阅读 · 0 评论 -
数据库开发及ADO.NET(49)——系统视图_syscolumns
syscolumns每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。 列名 数据类型 描述 name sysname 列名或过程参数的名称。 id int 该列所属的表对...原创 2019-09-02 11:47:34 · 173 阅读 · 0 评论 -
数据库开发及ADO.NET(48)——标识列的查询
1、判段一个表是否具有标识列可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')如果有,则返回1,否则返回02、判断某列是否是标识列可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法SELE...原创 2019-09-02 11:45:33 · 189 阅读 · 0 评论 -
数据库开发及ADO.NET(47)——sqlServer2000系统表常用操作_适用于sql2005_2008
--得到数据库中所有用户表Select [name] from sysObjects Where xtype='U'and [name]<>'dtproperties' Order By [name]--得到数据库中所有用户视图Select [name] From sysObjects Where xtype='V' And [name]<>'syssegment...原创 2019-09-02 11:42:35 · 186 阅读 · 0 评论 -
数据库开发及ADO.NET(46)——RDLC使用手册v2
RDLC使用手册v2为什么要使用RDLC报表为什么要使用RDLC报表,蜡人张在其博文“RDLC报表(一)”中已经很好的阐述了这一点。 (www.hicode.cn)VS .NET开发中,用什么进行报表设计?可能的回答是Crystal Report,当然,必须承认Crystal Report的功能还是非常强大的,被Business Object收购以后,商业的成分也在逐渐增加,也形成...原创 2019-09-02 11:12:18 · 832 阅读 · 0 评论 -
数据库开发及ADO.NET(28)——WHILE循环
WHILE(条件表达式) BEGIN --相当于C#里的{ 语句 …… BREAK END --相当于C#里的}例:问题: 书籍价格上涨,确保每本书价格最少50元。提价:先每本都加2元,看是否都价格达标,如果没有全部达标,每本再加2元,再看是否都达标,如此反复提价,直到所有书都达标为止 。分析: 第一步,统计没达标的本数 ; 第二步,如果有书没通过...原创 2019-09-01 00:17:32 · 153 阅读 · 0 评论 -
数据库开发及ADO.NET(27)——IF ELSE
IF(条件表达式) BEGIN --相当于C#里的{ 语句1 …… END --相当于C#里的}ELSE BEGIN 语句1 …… END例:问题: 统计并显示所有书籍价格(b_money) 的平均值,如果平均价格在50以上,显示“A“,并显示平均价格最高的2本书;如果在50以下,显示“B“,并显示平均价格最少的2本书。分析: 第一步,统...原创 2019-09-01 00:17:12 · 266 阅读 · 0 评论 -
数据库开发及ADO.NET(9)——drop、truncate和delete的区别
drop、truncate和delete的区别(1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。(2) 表和索引所占空间。当表...转载 2019-08-31 00:08:45 · 23681 阅读 · 0 评论 -
数据库开发及ADO.NET(8)——删除- delete [from] Table where col=data
1、删除表中全部数据:DELETE FROM T_Person。2、Delete只是删除数据,表还在,和Drop Table不同。3、Delete 也可以带where子句来删除一部分数据:DELETE FROM T_Person WHERE FAge > 204、Truncate:删除表数据/还原标识。下一篇文章会有详细说明。Truncate Table <表名>...原创 2019-08-31 00:08:29 · 5362 阅读 · 0 评论 -
数据库开发及ADO.NET(7)——更新- update Table set col=value,col2=value2 where ...
1、更新一个列:UPDATE T_Person Set Age=302、更新多个列:UPDATE T_Person Set Age=30,Name=‘tom’3、更新一部分数据: UPDATE T_Person Set Age=30 where Name=‘tom’,用where语句表示只更新Name是’tom’的行,注意SQL中等于判断用单个=,而不是==4、Where中还可以使用复...原创 2019-08-31 00:08:17 · 1945 阅读 · 0 评论 -
数据库开发及ADO.NET(6)——新增 - Inert into Table(col,col2...)values(data1,data2...)
1、Insert语句可以省略表名后的列名,但是不推荐。2、如果插入的行中有些字段的值不确定,那么Insert的时候不指定那些列即可。3、给可以给字段默认值,如果Guid类型主键的默认值设定为newid()就会自动生成,很少这么干。4、主键: insert into Person3(Name,Age) values('lily',38); insert into ...原创 2019-08-31 00:07:56 · 206 阅读 · 0 评论 -
数据库开发及ADO.NET(5)——主键选择&Globally Unique Identifier(全球唯一标识符)
1、SQLServer中两种常用的主键数据类型:int(或bigint)+标识列(又称自动增长字段);uniqueidentifier(又称Guid、UUID) 。2、用标识列实现字段自增可以避免并发等问题,不要开发人员控制自增。用标识列的字段在Insert的时候不用指定主键的值。将字段的“是标识列”设置为“是”,一个表只能有一个标识列。3、Guid算法是一种可以产生唯一标识的高效算法,它...原创 2019-08-31 00:07:28 · 410 阅读 · 0 评论 -
数据库开发及ADO.NET(4)——SQL语句入门_Structured Query Language(结构化查询语言)
1、SQL语句是和DBMS“交谈”专用的语句,不同DBMS都认SQL语法。2、SQL语句中字符串用单引号,而且是半角的单引号。3、SQL语句是大小写不敏感的,不敏感指的是SQL关键字,字符串值还是大小写敏感的。4、创建表、删除表不仅可以手工完成,还可以执行SQL语句完成,在自动化部署、数据导入中用的很多,CREATE TABLE T_Person(Id int NOT NULL,Nam...原创 2019-08-31 00:06:59 · 294 阅读 · 0 评论