精华内容
下载资源
问答
  • 数据库的三范式是什么? 第一范式:最基本要求,表的每一列必须保证原子性,列不可在分割。 如有一个列,年级班级。然后存储数据为,一年级一班,一年级二班。那么这是错误的,应该年级和班级分开为单独列。 ...
  • 一般来说,我是MySQL和数据库的新手。我试图创建一个MySQL存储过程,但不断得到一个模糊... COMMIT END'如果我删除了“PREPARE stmt ...”行,那么存储过程就被创建。当我放回线路时,再次出现错误。我做错了什么...

    一般来说,我是MySQL和数据库的新手。我试图创建一个MySQL存储过程,但不断得到一个模糊的语法错误:

    “你的SQL语法有错误;检查与你的MySQL服务器版本相对应的手册,以便在'sps; EXECUTE stmt USING nn,ee,ll,cc,uu; COMMIT END'

    如果我删除了“PREPARE stmt ...”行,那么存储过程就会被创建。当我放回线路时,再次出现错误。

    我做错了什么?

    DELIMITER //

    CREATE PROCEDURE `account_create` (nn VARCHAR(25),

    ee BIGINT,

    ll BIGINT,

    cc VARCHAR(100),

    uu VARCHAR(25))

    BEGIN

    DECLARE newId BIGINT;

    DECLARE sps VARCHAR(50);

    START TRANSACTION;

    set sps = 'INSERT INTO account SET name=?, entity=?, ledger=?, tblname=tmpXXX, creation_date=CURDATE(), comment=?, uname=?';

    PREPARE stmt FROM sps;

    COMMIT;

    END//

    展开全文
  • 数据库资料

    2018-04-01 22:00:33
    快速访问数据库 掌握创建存储过程,实现复杂的业务规则理解触发器的原理,实现高级的约束目标了解设计数据库的步骤掌握如何绘制数据库的E-R图理解数据库的规范化-三大范式为什么需要设计数据库 2-1 为什么需要设计...
  • 数据库锁机制

    2018-12-11 17:05:54
    如果对并发操作不加以控制的话,就可能会出现读取或存储错误数据的现象,从而破坏数据库数据的一致性。  加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对...

    一、什么是锁机制?数据库为要有锁机制?

           数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。如果对并发操作不加以控制的话,就可能会出现读取或存储错误数据的现象,从而破坏数据库数据的一致性。

            加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。枷锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

    二、锁的基本类型

           锁包括:行级锁、表级锁。

           (1) 行级锁,是一种排他锁,防止其他事务修改此行数据;在使用以下语句时,Oracle会自动应用行级锁:insert \ update \ delete \ select ... for update[of columns] [wait n | nowait];select ... for update语句允许用户一次锁定多条记录进行更新;

                使用 commit 或者 rollback 语句释放锁;

           (2) 表级锁,分为五类:

                ① 行共享 (row share) :禁止排他锁定表;

                ② 行排他 (row exclusive) :禁止使用排他锁和共享锁;

                ③ 共享锁 (share) :锁定表,对记录只读不写,多个用户可以同时在同一个表上应用此锁;

                ④ 共享行排他 (share row exclusive) :比共享锁更多的限制,禁止使用共享锁及更高的锁;

                ⑤ 排他 (excluesive) :限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表;

    三、乐观锁和悲观锁

            行级锁和表级锁是根据锁的粒度来区分的,行记录、表都是资源,锁是作用在这些资源上的。如果粒度比较小 (如行级锁),可以增加系统的并发量,但需要较大的系统开销,会影响到性能,出现死锁,因为粒度小则操作的锁的数量会增加; 而如果作用在表上,粒度大,开销小,维护的锁少,不会出现死锁,但是并发是相当昂贵的,因为锁定了整个表就限制了其他事务对这个表中其他数据记录的访问。

           (1) 悲观锁:是基于数据库机制实现的。

           Pessimistic Lock,它是指对数据被外界 (包括本系统当前的其他事务,以及来自外部系统的事务处理) 修改持保守悲观态度,事务每次去操作数据的时候都假设有其他事务会修改需要访问的数据,所以在访问之前都要求上锁;行锁、表锁等,读锁、写锁等,都是在做操作之前先上锁,因此,在整个数据处理过程中,将数据处于锁定状态。

            悲观锁的实现,往往依靠数据库提供的锁机制 (也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。

            一个典型的依赖数据库的悲观锁调用:  select * from Table_A where column_N="xxxx" for update;

            这条sql语句锁定了Table_A表中所有符合检索条件 (column_N="xxxx") 的记录。本次事务提交之前 (事务提交时会释放事务过程中的锁),外界无法修改这些记录。

            在业务逻辑实现过程中,往往需要保证数据访问的排他性。如在金融系统的日结算处理中,希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒,也可能是几个小时),数据再发生变化。此时,就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制在这里,也就是所谓的“锁”;即,给我们选定的目标数据上锁,使其无法被其他程序修改。

           Hibernate 悲观锁实现:基于数据库锁机制

    Query query = Session.createQuery("select * from User where username='Hellen'");
    query.setLockMode("User", LockMode.UPGRADE);    //加锁; User是用户实体类的别名
    List<User> ps = query.list();

           执行以上sql语句,Hibernate的悲观锁通过数据库的 for update 实现。

           LockMode.NONE:无锁机制;

           LockMode.WRITE:insert、update 记录时自动获取悲观锁;

           LockMode.READ:在读取数据时,自动获取悲观锁;

           LockMode.UPGRADE:利用数据库的 for update 子句加锁;

           LockMode.UPGRADE_NOWAIT:Oracle特定实现;用Oracle的 for update nowait 子句加锁;

           (2) 乐观锁:

            相对于悲观锁而言,乐观锁机制采用了更加宽松的加锁机制。悲观锁大多数情况下依靠数据的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。

           Optimistic Lock,即乐观锁,和悲观锁相反,事务每次操作数据之前,都假设其他事务不会修改这些需要访问的数据,所以在访问之前不需要上锁,只是在进行更新修改操作的时候判断一下在访问的期间有没有其他人修改数据了。它使用于多读的应用类型,冲突真的发生比较少的时候就比较好,这样省去了系统资源开销,可以提高吞吐量;但是如果是真的经常要发生冲突的,那每次还要去判断进行retry,反倒减低的了性能,这个时候悲观锁比较好。数据库如果提供类似于 write_condition机制的其实都是提供的乐观锁。

            如,一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户账户金额),若是采用悲观锁机制,也就意味着整个操作过程中(从操作员读出数据、开始修改,直到提交修改结果的全过程,甚至还包括操作员中途因事离开的时间),数据库记录始终处于加锁状态,可想而知,若有成百上千个并发,这样的情况将导致怎样的后果。

           乐观锁机制在一定程度上解决了这个问题。乐观锁大多是基于数据版本记录机制实现的。

           所谓的数据版本是指,数据增加一个版本标记,在基于数据表的版本解决方案中,一般是通过为数据库表增加一个“version”字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

            例如,数据库账户信息表中有个version字段,当前值为1;而当前账户余额字段 balance为 1000。

                       1. 操作员A此时将其读出 (version=1),并从其账户余额中扣除200 (1000 - 200);

                       2. 在操作员A操作的过程中,操作员B也读出此用户信息 (version=1),并从其账户中扣除 300;

                       3. 操作员完成了修改工作,将数据版本号增加1 (version=2),连同账户扣除后金额 (balance=800)提交到数据库进行了更新,此时由于提交数据版本大于数据库记录的当前版本,数据被更新,数据库记录version更新为2;

                       4. 操作员B完成了操作,也将版本号增加1 (version=2),试图向数据库提交数据(balance=700),但此时进行数据库记录版本发现,操作员B提交的数据版本号为2,数据库记录当前版本号也为2!!不满足 “提交版本必须大于记录当前版本才能执行更新”的乐观锁策略,因此,操作员B的提交将被驳回。这样,就避免了操作员B用基于version=1的就数据修改的结果覆盖操作A的操作结果的可能。

            从以上案例可看出,乐观锁机制避免了长事务中的数据库加锁开销(操作员A和操作员B操作过程中,都没有对数据库数据加锁),大大提升了大并发量下的系统整体性能表现。需要注意的是,乐观锁机制往往基于系统中的数据存储逻辑,因此也具备一定的局限性。如在上面的例子中,由于乐观锁机制实在系统实现的,来自外部系统的用户余额更新操作不受当前系统的控制,因此也可能会造成脏数据被更新到数据中。在系统设计阶段,我们应该充分考虑到这些情况出现的可能性,并进行相应的调整(如将乐观锁策略在数据库存储过程中实现,对外只开放基于此存储过程的数据更新途径,而不是将数据库表直接对外公开)。

           Hibernate在其数据访问引擎中内置了乐观锁实现,如果不用考虑外部系统对数据库的更新操作,利用Hibernate提供的透明化乐观锁实现,将会大大提升我们的生产力。Hibernate中可以通过class描述的optimistic-lock属性结合version描述符指定:

    <hibernate-mapping>
        <class name="com.packaging.entity.User" table="user_t" optimistic-lock="version"></class>
    </hibernate-mapping>

          optimisttic-lock属性的可选择值包括:

           ① none:无乐观锁;

           ② version:通过版本机制实现乐观锁;

           ③ dirty:通过检查发生过变动的属性实现乐观锁;

           ④ all:通过检查所有属性实现乐观锁;

    四、Java中的锁机制

           一段synchronized代码被一个线程执行前,它要先拿到执行这段代码的权限,在Java中就是拿到某个同步对象的锁(一个对象只有一把锁);若此时同步对象的锁被其他线程拿走了,那么当前线程就只能等待了,即当前线程被阻塞在锁池等待队列中。取到对象锁之后,线程就开始执行同步代码(被synchronized所修饰的代码);线程执行完同步代码后立即将同步锁归还给同步对象,其他在锁池中等待的线程就可以获取锁对象继而执行同步代码了。这就保证了同步代码在同一时刻只有一个线程在执行。

            在Java多线程编程中,一个非常重要的问题就是线程的同步问题;关于线程同步,一般有以下解决方案:

           ① 在需要同步的方法的方法签名中加入 synchronized 关键字;即将需要同步的方法定义为同步方法;

           ② 使用 synchronized 代码块对需要进行同步的代码段进行同步;即将需要同步的代码定义为同步代码块;

           另外,为了解决多个线程对同一变量进行访问时可能发生的安全性问题,不仅可以采用同步机制,也可以通过JDK1.2中加入的ThreadLocal来保证更好的并发性。

          1. 在Java多线程程序当中,当多个线程竞争同一个资源的时候,怎样保证不会产生相互干扰的问题;即需要是使用同步机制。一个线程一旦进入某一过程,必须等待正常的返回,并退出这一过程;下一个线程才能开始这个过程。也就是说,多线程的线程同步机制实际上是靠锁的概念来控制的,那么在Java程序中,锁时怎样体现的?

    首先,从JVM的角度来看锁的概念:在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:

           ① 保存在堆中的实例变量;     ② 保存在方法区中的类变量;

    这两类数据是被所有线程共享的;( 线程不需要协调保存在Java栈当中的数据。因为这些数据是属于拥有该栈的线程所私有的)

           在Java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的;

           对于一个对象来说,相关联的监视器保护对象的实例变量。

           对于类来说,监视器保护类的类变量。

           如果一个对象没有实例变量,或者一个类没有变量,相关联的监视器就什么也不监视。为了实现监视器的排他性监视能力,Java虚拟机为每个对象和类都关联一个锁。代表任何时候只允许一个线程拥有的特权。线程访问实例变量或类变量不需锁。

           但如果线程获取了锁,那么在它释放这个锁之前,就没有其他线程可以获取同样数据的锁了。锁住了一个对象就是获取对象相关联的监视器。

           类锁实际上用对象锁来实现。当虚拟机装载一个class文件的时候,它就会创建一个java.lang.Class类的实例。当锁住一个对象的时候,实际上锁住的是那个类的class对象。

           一个线程可以多次对同一个对象上锁。对于每一个对象,Java虚拟机维护一个加锁计数器,线程每获得一次该对象,计数器就加1,每释放一次,计数器就减1;当计数器值为0时,锁就会被完全释放了。

           Java编程人员不需要自己动手加锁,对象锁是Java虚拟机内部使用的。在Java程序中,只需要使用 synchronized 代码块或者 synchronized 方法就可以标志一个监视区域。当每次进入一个监视区域时,Java虚拟机都会自动锁上对象或者类。

          需要时刻牢记的是:当一个有限资源被多个线程共享的时候,为了保证对共享资源的互斥访问,一定要给他们排出先来后到。而要做到这一点,对象锁在这里起着非常重要的作用。

          2. 对于同步静态方法,对象锁就是该静态方法所在的类的Class实例,由于在JVM中,所有被加载的类都有唯一的类对象。

             ① 对于同步的方法或者代码块来说,必须获得对象锁才能进入同步方法或者代码块进行操作;

             ② 如果采用method级别的同步,则对象锁即就是method所在类的对象;如果是静态方法,对象锁即指method所在的Class对象(唯一);

             ③ 对于代码块,对象锁即指synchronized(obj)中的obj;

             ④ 如果是同步代码块,则对象锁需要开发人员自己指定,一般有些代码为synchronized(this)只有在单例模式才生效;

             ⑤ 如果是同步方法,则分为静态和非静态两种;静态方法则一定会同步;非静态方法需要在单例模式才会生效;推荐使用静态方法,不必担心是否单例。

     所以说,在Java多线程中,最常见的synchronized关键字实际上是依靠对象锁的机制来实现线程同步的。

    展开全文
  • 用户无意中会错误数据修改数据库,从而毁坏数据库。 3. 介质故障。如果磁盘驱动器变得不能使用,那么可能会丢失所有或部分数据。 4. 自然灾难。系统所在的设施可能会遭受火灾、洪水或其它类似灾难的损坏。 2. ...
  •  8.1 数据库存储结构  8.1.1 物理结构  8.1.2 逻辑结构  8.2 深刻理解表空间  8.2.1 大文件表空间  8.2.2 系统表空间  8.2.3 辅助表空间  8.2.4 回滚表空间(undo tablespace)  8.2.5 临时表空间 ...
  •  8.1 数据库存储结构  8.1.1 物理结构  8.1.2 逻辑结构  8.2 深刻理解表空间  8.2.1 大文件表空间  8.2.2 系统表空间  8.2.3 辅助表空间  8.2.4 回滚表空间(undo tablespace)  8.2.5 临时表空间 ...
  • 他在SQL Server专家联盟的董事会中服务了5年,为很多SQL Server杂志供过稿,也在讨论SQL Server数据库编程的国际会议上发过言。  Louis Davidson,作为企业数据库开发人员和架构师,他拥有超过15年的工作经验。目前...
  • 他在SQL Server专家联盟的董事会中服务了5年,为很多SQL Server杂志供过稿,也在讨论SQL Server数据库编程的国际会议上发过言。  Louis Davidson,作为企业数据库开发人员和架构师,他拥有超过15年的工作经验。目前...
  • 数据库恢复:当计算机系统发生硬件故障、软件故障,或者由于操作员的失误以及故意的破坏影响数据库中数据的正确性,甚至造成数据库部分或全部数据的丢失时,能将数据库错误状态恢复到某一已知的正确状态(亦称为...
  • 3.4.2 Oracle数据库中存储层次体系 87 3.4.3 字典管理和本地管理的表空间 90 3.5 临时文件 92 3.6 控制文件 94 3.7 重做日志文件 94 3.7.1 在线重做日志 95 3.7.2 归档重做日志 97 3.8 密码文件 99 3.9 ...
  • 在多个大型IT企业多年的工作历练,积累了大量的系统架构设计经验,擅长数据库和Web的设计、开发,精于故障诊断与处理,具有丰富的省部级电子政务行业工作经验及项目管理经验。  梁敬彬,网名wabjtam123 ITPUB...
  • CruiseYoung提供的带有详细书签的电子书籍目录 ... Oracle 9i & 10g编程艺术:深入...第9章讨论redo和undo,解释了它们分别是什么,并指出如何避免各种可能出现错误。第10章介绍了各种类型的表,其中最重要的是堆组织表...
  •  还是在2008年7月的时候,一次在线闲聊,我和阿里巴巴B2B的童家旺谈及写本数据库方面的技术图书的想法。我曾与他在一个DBA团队共事,深知他的技术功力。不过相对于图书创作来说,他更倾向于翻译一本质量过硬的...
  •  2009年8月,我们终于完成了这本书的组稿、编辑工作,可以将它呈现给大家,在这里我想和大家分享一下为什么会有这本书,以及这本书的来龙去脉。  一、选题及出发  在2008年底,我修订了《深入浅出Oracle》一书...
  • 错误原因:我们可以看到错误提示的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么出现4个字节呢?实际上是它对应的是智能手机输入法的...

    错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实际上是它对应的是智能手机输入法中的表情。那为什么会报错呢?因为mysql中的utf-8并不是真正意义上的utf-8,它只能存储1~3个字节长度的utf-8编码,如果想存储4个字节的必须用utf8mb4类型。不而要使用utf8mb4类型,首先要保证Mysql版本要不低于 MySQL 5.5.3。

    常用字符集

    ASCII:美国信息互换标准编码;英语和其他西欧语言;单字节编码,7位表示一个字符,共128字符。

    GBK:双字节,汉字内码扩展规范;中日韩汉字、英文、数字;双字节编码;共收录了21003个汉字,GB2312的扩展。

    UTF-8:Unicode标准的可变长度字符编码;Unicode标准(统一码),业界统一标准,包括世界上数十种文字的系统;

    UTF-8:使用一至三个字节为每个字符编码。

    utf8mb4:存储四个字节,应用场景用于存储emoji表情,因为可以emoji表情四个字节。

    utf8mb4:MySQL版本 > 5.5.3 。

    其他常见字符集:UTF-32,UTF-16,Big5,latin1

    数据库中的字符集包含两层含义

    各种文字和符号的集合,包括各国家文字、标点符号、图形符号、数字等。

    字符的编码方式,即二进制数据与字符的映射规则。

    解决方案:

    1)使用utf8mb4数据类型

    [client]

    default-character-set = utf8mb4

    [mysql]

    default-character-set = utf8mb4

    [mysqld]

    character-set-server = utf8mb4

    collation-server = utf8mb4_unicode_ci

    将数据库中对应的字段,改为utf8mb4_general_ci

    # 对每一个数据库:

    ALTER DATABASE 这里数据库名字 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

    # 对每一个表:

    ALTER TABLE 这里是表名字 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    # 对每一个字段:

    ALTER TABLE 这里是表名字 CHANGE 字段名字 重复字段名字 VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

    # 上面一句或者使用modify来更改

    ALTER TABLE 这里是表名字 modify 字段名字 VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '';

    utf8mb4完全向后兼容utf8,无乱码或其他数据丢失的形式出现。理论上是可以放心修改… 还是修改数据库比较方便。

    修改项目中的连接数据库的url,将characterEncoding=utf-8去掉,此步骤一定要进行

    2)自定义过滤规则,将文本中出现的四字节UTF-8字符过滤或转化为自定义类型。

    下面是将4字节字符转化为0000的测试例子。

    for (int i = 0; i < b_text.length; i++) {

    if((b_text[i] & 0xF8)== 0xF0){

    for (int j = 0; j < 4; j++) {

    b_text[i+j]=0x30;

    }

    i+=3;

    }

    }

    3)改成gbk编码也可以,不过我没试过

    查看三种MySQL字符集的方法

    一、查看MySQL数据库服务器和数据库MySQL字符集。

    mysql> show variables like '%char%';

    二、查看MySQL数据表(table)的MySQL字符集。

    mysql> show table status from sqlstudy_db like '%countries%';

    三、查看MySQL数据列(column)的MySQL字符集。

    mysql> show full columns from countries;

    展开全文
  • 前几篇我们介绍了Connection、Command和DataAdapter等对象,本节我们将学习ADO.NET不可缺少的事务,以及调用数据库的...如果能成功地执行一个任务,而在第二个或第三个相关的任务中出现错误,将发生什么?这个...

    前几篇我们介绍了Connection、Command和DataAdapter等对象,本节我们将学习ADO.NET中不可缺少的事务,以及调用数据库的存储过程。

    ADO.NET事务

    在许多大型、关键的应用程序中,计算机每秒钟都在执行大量的任务。更为经常的不是这些任务本身,而是将这些任务结合在一起完成一个业务要求,称为事务。如果能成功地执行一个任务,而在第二个或第三个相关的任务中出现错误,将会发生什么?这个错误很可能使系统处于不一致状态。这时事务变得非常重要,它能使系统摆脱这种不一致的状态。

    一个Command对象的CommandText属性指定多条以;分割的语句。这种情况下若没有事务,所有的语句都会被执行,若其中有语句出错,就导致了数据的不一致性。当然我们也可以写存储过程,在SQLServer的数据库系统内建存储过程的语句若没有事务,多条语句中的部分语句失效,一样导致数据的不一致性:你可以在存储过程内部Try/Catch/BeginTransaction等。

    下面我们做个示例展示事务在ADO.NET中的使用方法。

    string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa123;";

    using (SqlConnection con = new SqlConnection(connectionString))

    {

    con.Open();

    using (SqlTransaction tran = con.BeginTransaction())

    {

    using (SqlCommand com = con.CreateCommand())

    {

    try

    {

    com.Transaction = tran;

    com.CommandText = "insert into table values('1','111')";

    com.ExecuteNonQuery();

    com.CommandText = "insert into table values('2','222')";

    com.ExecuteNonQuery();

    tran.Commit();

    Console.WriteLine("事务提交成功");

    }

    catch (SqlException ex)

    {

    tran.Rollback();

    con.Close();

    Console.WriteLine("事务提交失败:" + ex.Message);

    }

    }

    }

    }

    Connection对象BeginTransaction启动事务,然后将事务赋值给Command对象的Transaction属性即挂接了事务。即使没有Commit 和Rollback,若执行中 错误,事务一样自动回滚,或者成功提交。

    BeginTransaction可以指定隔离级别。ReadXXX不会对数据库加锁,尽管在事务中,外部程序仍然可以读取数据;但若事务中有Update语句,将导致数据库锁,外部程序不能继续读取数据。

    尽量考虑在存储过程中使用事务,避免使用ADO的事务,因为ADO的事务可能导致数据库长时间处于锁定状态;而数据库内的存储过程中的事务往往不会长时间挂起事务。

    ADO.NET调用存储过程

    存储过程(Stored Procedure)是一组为了完成特定功能的T-SQL语句集合,经编译后存储在SQL Server服务器中,利用存储过程可以加速SQL语句的执行。

    在应用程序中,使用存储过程读取数据,能够提高应用程序的工作效率,简化数据库的管理和显示信息

    创建一个带有输入参数的存储过程:

    CREATE PROCEDURE GetUserPro

    @id INT

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

    SET NOCOUNT ON;

    SELECT * FROM dbo.eftest WHERE id=@id

    END

    GO

    ADO.NET中调用存储过程示例:

    string connectionString = "Data Source=.;Initial Catalog=ax_log;User Id=sa;Password=sa123;";

    using (SqlConnection con = new SqlConnection(connectionString))

    {

    string sql = "GetUserPro";

    SqlParameter para = new SqlParameter("@id", );

    using (SqlCommand com = new SqlCommand(sql, con))

    {

    DataSet ds = new DataSet();

    try

    {

    com.Parameters.Add(para);

    con.Open();

    com.CommandType = CommandType.StoredProcedure;

    SqlDataAdapter adapter = new SqlDataAdapter(com);

    adapter.Fill(ds);

    foreach (DataRow s in ds.Tables[].Rows)

    {

    Console.WriteLine("ID:" + s["id"].ToString());

    Console.WriteLine("Name:" + s["name"].ToString());

    }

    }

    catch (Exception ex)

    { }

    }

    }

    看过Command对象介绍的时候,代码跟那个差不多 ,是的  比Command章节的代码就多了一行:com.CommandType = CommandType.StoredProcedure; CommandType 默认情况是:com.CommandType = CommandType.Text;CommandType.StoredProcedure表示执行存储过程。

    ADO&period;NET系列之Connection对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...

    ADO&period;NET系列之Command对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 上一篇

    ADO&period;NET系列之DataAdapter对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 我们前两篇文章介绍了ADO ...

    c&plus;&plus; ado 调用存储过程并得到输出参数和返回值

    // AccessSqlserverByAdo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include

    Java数据库连接——JDBC调用存储过程&comma;事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

    SSIS使用OleDB和Ado&period;Net两种方式调用 存储过程

    在使用”执行 SQL 任务“组件调用存储过程时,连接方式使用OleDB和Ado.Net稍有不同,结合图例说明一下 当我们使用OleDB时,设置的截图如下: 参数使用?来代替,Parameter Nam ...

    ADO&period;NET笔记——调用存储过程

    相关知识: 在ADO.NET访问SQL Server时,鼓励使用存储过程取代常规的SQL语句. 存储过程有下列优点: 存储过程中的SQL语句将会经过预先的解析和编译,然后存放在数据库服务器上行.调用的 ...

    ADO&period;NET访问SQL Server调用存储过程带回参

    1,ADO.NET访问SQL Server调用存储过程带回参 2,DatabaseDesign  use northwind go --存储过程1 --插入一条商品 productname=芹菜 un ...

    delphi用TAdoStoredProc调用存储过程,兼容sql2005、2008、2014的远程事务问题

    delphi7写的程序,在sql2000里没问题,调用sql2008.2014里的存储过程时,如果存储过程里操作了大量数据,很容易会莫名其妙的自己撤销掉,但是程序还识别不到,认为还在正常执行.今天尝试 ...

    随机推荐

    Windows自动关机命令

    winxp中自带了自动关机功能,在开始→运行中使用SHUTDOWN命令 1. 延迟关机关机 shutdown -s -t 120 -s为关机:-t为时间,以秒为单位,120表示2分钟 表示两分钟后关机 ...

    会员管理系统全部源代码&lpar;C&num;&plus;EF&plus;SQLite&plus;Winforms实现&rpar;

    会员管理系统全部源代码,VS2010开发,使用Ado.net实体框架EF,简化数据库访问层,并能方便的移植到其他数据库.利用数据绑定减少编码量,提高程序的可维护性和可读性.使用Winfoms方便快速界 ...

    mysql 索引篇

    一.索引优化   索引优化主要还是依赖explain命令,关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output,这里需要强调rows是核心指标,绝大部分r ...

    弹出输入内容prompt

    redis 在 php 中的应用(Sorted-set篇)

    本文为我阅读了 redis参考手册 之后编写,注意 php_redis 和 redis-cli 的区别(主要是返回值类型和参数用法) Redis 有序集合和集合一样也是string类型元素的集合,且不 ...

    POJ 1741&period;Tree 树分治 树形dp 树上点对

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 24258   Accepted: 8062 Description ...

    Java的反射机制与泛型擦除

    实现方式 反编译:.class–>.java 通过反射机制访问java对象的属性,方法,构造方法等涉及类 java.lang.Class; java.lang.reflect.Construct ...

    Java网络编程和NIO详解4:浅析NIO包中的Buffer、Channel 和 Selector

    Java网络编程与NIO详解4:浅析NIO包中的Buffer.Channel 和 Selector 转自https://www.javadoop.com/post/nio-and-aio 本系列文章首 ...

    Python基础知识-06-集合内存布尔False

    python其他知识目录 1.判断一个字符串中是否有敏感字符? #str: m_str="我叫魔降风云变" if "魔" in m_str: #判断指定字符是否 ...

    【白书训练指南】(UVa10755)Garbage Heap

    先po代码,之后把我那几个不太明了的知识点讲讲,巩固以下.三维的扫描线算法想要掌握还真是有一定的难度的. 代码 #include #include

    展开全文
  • 当为shapefile时,必须存储在文件夹,而当选择其他数据类型时必须创建数据库或选择已用数据库,大家出现错误的很多时候都是因为选择不匹配,但是小编还是建议大家将数据存储数据库中,习惯数据库存储模式,...
  • SAN方案必须提供自管理能力,尤其在错误恢复、数据可用性以及性能管理方面,纠错和失败恢复也是企业存储的关键问题,RAID使存储管理员从由于硬盘失败而引起的数据丢失的担心解脱出来。自动的负载平衡减轻了对存储...
  • 错误原因:我们可以看到错误提示的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么出现4个字节呢?实际上是它对应的是智能手机输入法...
  • 错误原因:我们可以看到错误提示的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式的4字节编码(UTF-8编码规范)。正常的汉字一般不会超过3个字节,为什么出现4个字节呢?实际上是它对应的是智能手机输入法...
  • (OSStatus 错误-43.)这是什么意思我正在将文件存储在 Iphone Document 文件夹,并在我的数据库中复制其名称所以,当我从数据库中播放它时,它正确获取文件路径和文件和数据库中的文件名完美地连接但无法播放2010-...
  • MYSQL中文手册

    2013-03-11 21:21:34
    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用...
  • 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
  • ABAP中文幫助文檔

    2018-10-27 19:07:09
    如果从 $TMP之外的开发类更改程序,则会出现一个窗口,从中可以指定更正号。  运行程序测试它(关于测试的详细信息,参见《测试程序》)。 6)、将事务代码分配给程序 可以将事务代码分配给类型1的单独程序,以后就将...
  • MySQL 5.1中文手冊

    2009-12-11 09:43:12
    在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...
  • 但有时候,似乎是当数据量大的时候,会出现一条数据同时重复发送了两次。查询主表和结果表后显示:主表发送次数字段为2,结果字段为1(成功),也就是这条数据在同一时间重复发送了两次,第二次是成功发送的。再查询...
  • 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 171
精华内容 68
关键字:

数据库存储中会出现什么错误