SQL
陆老师Peter
高校计算机专业教师、项目经理、软件研发负责人。
展开
-
数据库开发及ADO.NET(17)——去掉数据重复
1、执行如下的SQL语句,Alter和Insert单独执行。ALTER TABLE T_Employee ADD FSubCompany VARCHAR(20);ALTER TABLE T_Employee ADD FDepartment VARCHAR(20);UPDATE T_Employee SET FSubCompany='Beijing',FDepartment='Deve...原创 2019-09-01 00:11:34 · 172 阅读 · 0 评论 -
数据库开发及ADO.NET(28)——WHILE循环
WHILE(条件表达式) BEGIN --相当于C#里的{ 语句 …… BREAK END --相当于C#里的}例:问题: 书籍价格上涨,确保每本书价格最少50元。提价:先每本都加2元,看是否都价格达标,如果没有全部达标,每本再加2元,再看是否都达标,如此反复提价,直到所有书都达标为止 。分析: 第一步,统计没达标的本数 ; 第二步,如果有书没通过...原创 2019-09-01 00:17:32 · 140 阅读 · 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 · 136 阅读 · 0 评论 -
数据库开发及ADO.NET(30)——存储过程、系统存储过程、创建存储过程(编写分页存储过程)、编写存储过程、调用带参数的存储过程、存储过程中使用输出参数
一、存储过程1、存储过程---就像数据库中运行方法(函数)。2、和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。3、前面学的if else/while/变量 等,都可以在存储过程中使用。4、优点:执行速度更快:在数据库中保存的存储过程语句都是编译过的,运行时无需再次编译。 允许模块化程序设计:类似方法的复用。 提高系统安全性:防止SQL注入。 减少网络...原创 2019-09-01 00:18:00 · 287 阅读 · 0 评论 -
数据库开发及ADO.NET(31)——触发器
1、触发器是一种特殊类型的存储过程,它不同于前面介绍过的一般的存储过程。2、一般的存储过程通过存储过程名称被直接调用,而触发器主要是通过事件进行触发而被执行。3、触发器是一个功能强大的工具,在表中数据发生变化时自动强制执行。触发器可以用于SQL Server约束、默认值和规则的完整性检查,还可以完成难以用普通约束实现的复杂功能。4、那究竟何为触发器?在SQL Server里面也就是对某...原创 2019-09-01 00:38:38 · 268 阅读 · 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 · 169 阅读 · 0 评论 -
数据库开发及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 · 324 阅读 · 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 · 225 阅读 · 1 评论 -
数据库开发及ADO.NET(35)——连接SQLServer
一、连接SQLServer(SqlConnection)1、先来看个例子:问题:那怎样才能搭起这座通道呢?需要哪些信息?二、连接SQLServer(Connection)2、连接字符串:程序通过连接字符串,指定要连哪台服务器上的、哪个实例的哪个数据库、用什么用户名密码等。3、项目内嵌mdf文件形式的连接字符串 "DataSource=.\SQLEXPRESS;AttachD...原创 2019-09-01 15:31:56 · 653 阅读 · 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 · 251 阅读 · 0 评论 -
数据库开发及ADO.NET(26)——变量:局部变量、全局变量(系统变量)
1、局部变量:先声明再赋值。2、声明局部变量:DECLARE @变量名 数据类型(1)DECLARE @bookName varchar(20)(2)DECLARE @bId int3、赋值:(1)SET @变量名 =值 --set用于普通的赋值(2)SELECT @变量名 = 值 --用于从表中查询数据并赋值4、例如:(1)SET @ b...原创 2019-09-01 00:16:58 · 914 阅读 · 0 评论 -
数据库开发及ADO.NET(18)——联合结果集Union、Union all
一、联合结果集1、执行以下的代码:CREATE TABLE T_TempEmployee (FIdCardNumber VARCHAR(20),FName VARCHAR(20),FAge INT, PRIMARY KEY (FIdCardNumber));INSERT INTO T_TempEmployee(FIdCardNumber,FName,FAge) VALUES('1234...原创 2019-09-01 00:13:05 · 187 阅读 · 0 评论 -
数据库开发及ADO.NET(19)——数字函数:分页的时候用。字符串函数
一、数字函数:分页的时候用1、执行以下代码:CREATE TABLE T_Person (FIdNumber VARCHAR(20),FName VARCHAR(20),FBirthDay DATETIME,FRegDay DATETIME,FWeight NUMERIC(10,2));INSERT INTO T_Person(FIdNumber,FName,FBirthDay,...原创 2019-09-01 00:14:01 · 95 阅读 · 0 评论 -
数据库开发及ADO.NET(20)——日期函数
1、GETDATE() :取得当前日期时间。2、DATEADD (datepart , number, date ),计算增加以后的日期。参数datepart为计量单位,可选值见以下列出;参数number为增量,当number为负数时,是在计算减少以后的日期;参数date为待计算的日期。DATEADD(DAY, 3,date)为计算日期date3天后的日期,而DATEADD(MONTH ,-8...原创 2019-09-01 00:14:29 · 217 阅读 · 0 评论 -
数据库开发及ADO.NET(21)——类型转换函数(CAST是重中之重)、空值处理函数
一、类型转换函数1、CAST ( expression AS data_type)//cast(要转换的值 as 要转换的类型),跟其他类型转换的区别:错误时不报错,而是返回一个null。2、CONVERT ( data_type, expression)3、例1:SELECT FIdNumber, RIGHT(FIdNumber,3) as 后三位, C...原创 2019-09-01 00:15:11 · 756 阅读 · 0 评论 -
数据库开发及ADO.NET(22)——索引Index
1、全表扫描:对数据进行检索(select)效率最差的是全表扫描,就是一条条的找。2、如果没有目录,查汉语字典就要一页页的翻,而有了目录只要查询目录即可。为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录。3、创建索引的方式,在表设计器中点击右键,选择“索引/键”→添加→在列中选择索引包含的列。4、使用索引能提高查询效率,但是索引也是占据空间的,而且添加、更新、删除数据...原创 2019-09-01 00:15:43 · 142 阅读 · 0 评论 -
数据库开发及ADO.NET(24)——子查询、ROW_NUMBER()
1、将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。所有可以使用表的地方几乎都可以使用子查询来代替。SELECT * FROM(SELECT * FROM T2 where FAge<30) 2、执行以下的SQL:CREATE TABLE T_Reader (FId INT NOT NULL ,FName VA...原创 2019-09-01 00:16:12 · 288 阅读 · 0 评论 -
数据库开发及ADO.NET(23)——表连接Join
1、有客户表(T_Customers)和订单表(T_Orders)两个表,客户表字段为:Id、Name、Age,订单表字段为:Id、BillNo、CustomerId,订单表通过CustomerId关联客户表。测试数据如下:(在做表与表的连接查询时,大表在前,小表在后)CREATE TABLE [T_Customers]( [Id] [int] NOT NULL, [Name] [nva...原创 2019-09-01 00:15:57 · 387 阅读 · 0 评论 -
数据库开发及ADO.NET(25)——视图_View、视图概述
视图概述1、视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。2、视图在操作上和数据表没有什么区别,但两者的差异是其本质是不同:数据表是实际存储记录的地方,然而视图并不保存任何记录,它存储的实际上是查询语句。3、相同的数据表,根据不同用户的不同需求,可以创建不同的视图(不同的查询语句)。4、优点:筛选表中的行; 防止未经许可...原创 2019-09-01 00:16:25 · 339 阅读 · 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 · 400 阅读 · 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 · 234 阅读 · 0 评论 -
数据库开发及ADO.NET(38)——SqlDataAdapter&数据集-查询多行、DataSet
二、DataSet1、SqlDataReader是连接相关的, SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。2、SqlDataReader对于小数据量的数据来说带来的只有...原创 2019-09-02 00:02:33 · 299 阅读 · 0 评论 -
数据库开发及ADO.NET(49)——系统视图_syscolumns
syscolumns每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。 列名 数据类型 描述 name sysname 列名或过程参数的名称。 id int 该列所属的表对...原创 2019-09-02 11:47:34 · 161 阅读 · 0 评论 -
数据库开发及ADO.NET(50)——系统视图_sysobjects
sysobjects在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。 列名 数据类型 描述 name sysname 对象名。 Id int 对象标识号。 xtyp...原创 2019-09-02 11:49:14 · 118 阅读 · 0 评论 -
数据库开发及ADO.NET(51)——信息架构视图_INFORMATION_SCHEMA
information_schema数据库表说明:--获取SimpleArticle数据库中所有的表信息select * from SimpleArticle.INFORMATION_SCHEMA.TABLESSCHEMATA表:提供了当前实例中所有数据库的信息。是show databases的结果取之此表。TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于...原创 2019-09-02 11:50:28 · 127 阅读 · 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 · 154 阅读 · 0 评论 -
数据库开发及ADO.NET(53)——补充触发器
一、创建一个简单的触发器触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的...原创 2019-09-02 11:53:46 · 144 阅读 · 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 · 130 阅读 · 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 · 140 阅读 · 0 评论 -
数据库开发及ADO.NET(56)——SQLServer安全设置
1、SQLServer是一个没有界面的后台服务,可以通过ADO.Net连接SQLServer执行CreateTable、Update语句操作数据库,ManagementStudio是一个管理客户端,通过它连接SQLServer就可以用图形化的方式操作数据库。2、访问数据库必须是通过验证的,否则不安全。用ManagementStudio 以Windows身份验证方式登录数据库;在数据库根节点(....原创 2019-09-03 01:49:28 · 304 阅读 · 0 评论 -
数据库开发及ADO.NET(48)——标识列的查询
1、判段一个表是否具有标识列可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')如果有,则返回1,否则返回02、判断某列是否是标识列可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法SELE...原创 2019-09-02 11:45:33 · 173 阅读 · 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 · 176 阅读 · 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 · 137 阅读 · 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 · 203 阅读 · 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 · 358 阅读 · 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 · 277 阅读 · 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 · 186 阅读 · 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 · 297 阅读 · 0 评论 -
数据库开发及ADO.NET(45)——RDLC报表
一、什么是报表1、什么是报表:“报表=多样的格式+动态的数据” 人们利用计算机处理数据和界面设计的功能来生成、展示报表。实现报表的主要特点是数据动态化,格式多样化,并且实现报表数据和报表格式的完全分离。2、报表工具:(1)水晶报表(微软从其他厂商引入的报表工具)。(2)RDLC(微软自己开发的报表工具)(3)其它。如:Grid++Report 等。二、什么是RDLC...原创 2019-09-02 10:59:13 · 770 阅读 · 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 · 724 阅读 · 0 评论