学习ADO,免不了要跟数据库打交道,对于初学者来说,如果不整理一下整个流程,那么可能会出现很多的问题,下面简单的介绍数据库的操作流程。

1.     我们最终操作的对像是数据表,在操作数据表之前我们先要明确我们要操作的数据库,因为只有先连接了数据库才能进入数据库操作里面存储的表。

所以才有以下连接数据库的代码:

     string connString = "Data Source=.;Initial Catalog=MySchool;Integrated Security=True";

     server=.\sqlexpress; database=myschool;User id=sa; Pwd=*****    --数据库连接字符串

     server=.\sqlexpress; database=myschool;Uid=sa; password=*****

     数据库连接 Connection 对象,连接通道

     SqlConnection connection = new SqlConnection(connString);

     数据库连接建立后需要将连接打开才能真正实现数据库的连接,否则连接语句仅仅是一个语句而已,不能起到任何作用。所以才需要以下代码:

      connection.Open();  -- 打开连接

2.     当我们成功连接上数据库之后我们需要做什么事情呢?

我们知道,操作数据库可以使用SQL语句,SQL语句就是用来做数据库的增加,删除,修改,查询操作的。所以我们需要定义一个SQL语句告诉电脑应该做什么样的事情。所以才有以下语句:如

string sql = string.Format("SELECT count(*) FROM Admin WHERE LogInId='{0}' AND LogInPwd='{1}'", loginId, loginPwd );   ExcuteScalar  ExcuteNonQuery()

if(num!=0)

{

}

3.     当我成功连接上数据库,也写好的SQL语句就行了吗?

当然不行,因为我们如果不去执行SQL语句,那它也仅仅是一个语句而已,就像我们在SQL SERVER里面写了SQL语句而不是去执行一下不能起到任何作用。所以我们需要一个命令对像来“执行”SQL语句,这个命令对像就是SqlCommand对像,它是一个系统对像,我们要使用它必须先实例化出一个新的对像,所以才有以下代码:

SqlCommand command = new SqlCommand(sql, connection);//command是实例化对像的名称,sql是说明需要执行的SQL语句, connection是说明如何连接数据库

Command.CommandText=sql;

Command.Connection=connection;

4.有了command对像还不够了,因为他也仅仅是一个对像,要它起作用还需要调用它的相应的方法,就是“对像.方法”。具体方法如下:

A:如果是要做查询,就是说找到我想得到具体的数据的值(不是符合条件的个数, 不是聚合函数,也不是单个值),那就使用SqlCommandExecuteReader()方法返回一个SqlDataReader对象,这个对象的Read()方法一次可以返回一行的值,这一行的值由SQL语句的select来决定,select后面查询的字段越多,那么这个方法得到的值就越多,也就是说返回的这一行的数据就越多!

B:如果对数据做增加,删除,修改,那就要调用SqlCommandExecuteNonQuery()方法,这个方法可以执行某个操作,同时返回受影响和行数。到底什么操作呢?这和你的SQL语句是有关的。SQL语句写了增加,那它就执行增加。如果写了删除,那它就执行删除。如果不是增加删除和修改就返回-1

C:如果只是返回满足条件的个数或者返回第一行第一列的值,那一般就会使用SqlCommandExecuteScalar()方法,例如SQL语句里面写了聚合函数等。它的返回类型是object,需要做强制类型转换,因为有可能将object转换为其它类型,所以一般使用Convert进行转换。(数据库中的所有数据都是值类型,所以读取过来后需要做装箱,在做拆箱只能拆到原始的数据类型

5.那么我们如何知道这个操作被成功的执行了呢?

这个时候我们需要方法给我们返回相应的值,ExecuteScalar()返回单个值,如聚合函数或者单列的一个值,这个值的类型是object,需要做强制的类型转换,ExecuteNonQuery()返回受影响的行数,它们都可以是一个整型值,所以我们经常看到这样的代码:

count = (int)command.ExecuteScalar();  --- 执行查询语句

但是ExecuteReader()返回多个值,所以我们需要使用循环去做接收,一般是将读取出来的值赋给相应的字符串变量,或者放到相关控件里面做显示,所以我们可能看到这样的代码:

  while (dataReader.Read())

                { 

gradeName = (string)dataReader[0];  --将值赋值给一个变量

                }

6.对于ExecuteScalar()和ExecuteNonQuery()接下来我们就可以对方法返回的值做一个判断了,所以经常看到这样的代码:

if (result== 1)  @@rowcount

     {

          MessageBox.Show("添加成功!”);

      }                    

else

    {

         MessageBox.Show("添加失败!");

    }

      

 7、还有平时我们经常会接触都应用程序跟数据库进行交换,那么我们可以用一个简单的图来说明应用程序是怎么跟数据库打交道的:

               

       以上的图清晰的展示了五大对象各施其职和他们之间的关系,如果有什么问题可以联系我!

SQL Server数据库的操作流程和连接的简单介绍的更多相关文章

  1. Windows 2008服务器环境PHP连接SQL Server数据库的配置及连接方法

    背景: PHP程序常用的数据库是Mysql数据库,但是由于实际项目需要,要求PHP网站连接SQL Server数据库查询一些必要信息.因此,本文就来给大家介绍一下如何安装及配置PHP扩展,可以实现PH ...

  2. 修改SQL Server数据库表的创建时间最简单最直接有效的方法

    说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...

  3. 在Navicat premium上创建的SQL Server数据库,实现用PHP连接(即php连接微软MSSQL)

    用 freetds 或 dblib的方式连接sql server 在windows下使用FreeTDS 什么是FreeTDS? FreeTDS其实就是一个开源(或者可以说成自由)的C程序库,它可以实现 ...

  4. SQL Server 索引(index) 和 视图(view) 的简单介绍和操作

    --索引(index)和视图(view)-- --索引(index)----概述: 数据库中的索引类似于书籍的目录,他以指针形式包含了表中一列或几列组合的新顺序,实现表中数据库的逻辑排序.索引创建在数 ...

  5. sql server中关于批处理与脚本的简单介绍

    1.批处理 批处理指的是包含一条或多条T-SQL语句的语句组,这组语句从应用程序一次性地发送到SQL Server服务器执行.SQL Server服务器将批处理语句编译成一个可执行单元(即执行计划), ...

  6. sql server 数据库还原后sa连接不上原因

    手动创建了一个同名数据库,然后还原以前或者别人的备份,还原虽然成功了,但是在VS中连接不上,原因可能是: 数据库的所有者中没有添加sa,方法即在数据库名上右击,然后选择文件,在所有者中添加上sa,应该 ...

  7. 用ASP.NET/C#连接Access和SQL Server数据库

    连接Access 首先看一个例子代码片断:程序代码: ------------------------------------------------------------------------- ...

  8. Excel表数据导入Sql Server数据库中

    Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nv ...

  9. SQL Server数据库存储过程的异常处理

    SQL Server数据库存储过程的异常处理是非常重要的,明确的异常提示能够帮助我们快速地找到问题的根源,节省很多时间.本文我们就以一个插入数据为例来说明SQL Server中的存储过程怎么捕获异常的 ...

随机推荐

  1. JS中的for和for in循环

    1.for循环通常用来遍历数组或类数组对象 模式1:长度缓存 for(var i=0,max=arr.length;i<max;i++){ //your code } 模式2:逐减,与零比较比与 ...

  2. C++中的cout输出机制

    代码: #include <iostream> using namespace std; int hello(){ cout<<"hello"<< ...

  3. C/C++中的空类及抽象类大小

    代码: #include <iostream> using namespace std; struct A{ }; struct B{ int i; }; class C:B{ ; }; ...

  4. (转)用Eclipse编译你的ROS程序

    原地址: http://blog.csdn.net/sujun3304/article/details/18572017 好了,理解了系统各个组件的含义后,还是直接进入程序真刀真枪的从实践中学习吧! ...

  5. 电脑文本text和部分文字出现其他语言乱码

     1.文本的编码存在问题 解决办法: 将text文件打开>>文件(左上角)>>另存为>>选择其他格式的编码试试(在保存键左侧)>>保存再打开 2.系统区 ...

  6. Halloween party

    https://www.hackerrank.com/challenges/halloween-party def main(): t = int(raw_input()) for _ in rang ...

  7. C语言预处理指令的初步了解

    所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作.预处理是C语言的一个重要功能,它由预处理程序负责完成.当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分 ...

  8. iOS中构造函数与析构函数

    一.构造函数 在OC中凡是已init开头的函数我们都称之为构造函数,在声明构造函数的时候,不带参数的一般直接声明为“-(id)init”,带参数的一般声明为“-(id)initWith...”. 1 ...

  9. cf C. Alice and Bob

    http://codeforces.com/contest/347/problem/C 这道题就是求出n个数的最大公约数,求出n个数的最大值,总共有max1/gcd-n个回合.然后判断如果回合数%2= ...

  10. Codeforces 474D Flowers

    http://codeforces.com/problemset/problem/474/D 思路:F[i]=F[i-1]+(i>=K)F[i-k] #include<cstdio> ...