ADO.Net连接模式

时间:2021-11-19 05:23:48

1.SqlConnection类

(1).通过构造函数创建一个SqlConnection对象,可以同时指定连接字符串

(2).通过SqlConnection对象的Open()方法打开数据库连接

(3).操作完成后,通过SqlConnection对象的Close()方法关闭数据库连接

//连接字符串

string connString="Srever=.;Database=test;Integrated Security=true";

//创建Connection对象

SqlConnection conn=new SqlConnection(connString);

conn.Open();

...

conn.Close();

connString指定了数据库服务器(Server)是"."(本地),

Integrated Security关键字为true表示使用内置的Windows认证。

连接字符串还有其他写法:

Data Source=.;

Initial Catalog=pubs;

User Id=sa;

Password=123

Initial Catalog等同于Database

User Id=sa;Password=123表示使用SqlServer认证模式访问数据库

如果希望访问SQL Server的一个以命名的实例,应向Data Source的值中添加一个反斜杠(\),然后添加SQL Server实例的名称。

string strConn=""Data Source=".\\SQLExpress;";

或strConn=@"Data Source=.\SQLExpress";

下面的示例中使用SqlConnectionStringBuilder属性

    SqlConnectionStringBuilder str = new SqlConnectionStringBuilder();
            str.DataSource = ".";
            str.InitialCatalog = "test";
            str.IntegratedSecurity = true;
            SqlConnection con = new SqlConnection(str.ToString());
            con.Open();
            if (con.State == ConnectionState.Open)
            {
                Console.WriteLine("数据库连接成功");
            }
            con.Close();

2.SqlCommand类

(1).通过SqlConnection类建立可用的数据库连接

(2).通过SqlConnection的Open()方法打开数据库连接

(3).创建SqlCommand类的对象,利用构造函数初始化要执行的SQL命令

(4).使用SqlCommand.ExecuteNoQuery()方法执行SQL命令

(5).如果需要,则重复第(3)和第(4)步,执行更多的SQL命令

(6)通过SqlConnection的Close()方法关闭数据库连接

Command对象提供了3个方法来执行命令

ExecuteNonQuery()

  执行非SELECT语句,如插入,删除和更新等SQL语句。返回值显示命令影响的行数。

  也可以执行数据定义命令,该命令可以创建修改和删除数据库对象(如表,索引和约束等)

ExecuteScalar()//返回一个对象,所以需要把返回值转化为适当的类型

  执行Select查询,并返回命令生成的记录的第一行第一列的字段

  该方法常用来使用COUNT(),SUM等集合SELECT语句类计算单个值

ExecuteReader()

  执行SELECT语句,并返回一个封装了只读,只进游标的DataReader对象

    

     SqlConnectionStringBuilder str = new SqlConnectionStringBuilder();
            str.DataSource = ".";
            str.InitialCatalog = "test";
            str.IntegratedSecurity = true;
            SqlConnection con = new SqlConnection(str.ToString());
            con.Open();
            if (con.State == ConnectionState.Open)
            {
                Console.WriteLine("数据库连接成功");
            }
            
            string sql = "Select * from T_Scores";
            /*也可以改写为
             *
             * SqlCommand cmd1 = con.CreateCommand();
             * cmd1.CommandText = sql;            
             */
            SqlCommand cmd = new SqlCommand(sql,con);
            int result = cmd.ExecuteNonQuery();
            Console.WriteLine("受影响的行数{0}",result);
            con.Close();

3.SqlDataReader类

用于读取SQL Server数据库记录的只读只向前数据记录读取器,允许只进,只读流的方式,每次获取一天Select命令返回的记录。

DataReader方法:

Read:将行游标前进到流的下一行,在读取第一行记录前也必须调用这个方法(DataReader刚创建时,行游标在第一行之前),当还有其他行时,Reader()方法返回true,如果已经是最后一行则返回false;

GetValue:返回当前行中指定序列号的字段值。

NextResult()如果命令返回的DataReader包含多个行集,该方法将游标移动到下一个行集(刚好在第一行以前)

通过SqlCommand.ExecuteReader()方法执行SQL命令,执行完成后返回一个获取查询结果的SqlDataReader对象。开始时SqlDataReader指向第一条记录之前,必须通过SqlDataReader对象的Read()方法才可以读取下一条记录,重复执行,直到全部记录读取完成。

通过SqlCommand类和SqlDataReader类执行查询操作,通常需要一下几个步骤:

1.通过SqlConnection类建立可用的数据库连接

2创建SqlCommand类的对象,利用构造函数初始化要执行的SQL命令

3.通过SqlConnection对象的Open()方法打开数据库连接

4.使用SqlCommand.ExcuteReader()方法执行SQL命令,并返回SqlDataReader对象

5.通过SqlDataReader对象GetXXX()方法或者其索引器的方式获取某个字段的值

6.通过SqlDataReader对象的Read()方法读取下一条记录,重复第(5)步直到记录全部读完

7.通过SqlConnection对象的Close()方法关闭数据库连接

    SqlConnectionStringBuilder str = new SqlConnectionStringBuilder();
            str.DataSource = ".";
            str.InitialCatalog = "test";
            str.IntegratedSecurity = true;
            SqlConnection con = new SqlConnection(str.ToString());
            con.Open();
            if (con.State == ConnectionState.Open)
            {
                Console.WriteLine("数据库连接成功");
            }
            string sql = "Select * from T_Scores";
            SqlCommand cmd = new SqlCommand(sql,con);
            SqlDataReader sdr = cmd.ExecuteReader();
            Console.WriteLine("查询结果:");
            while (sdr.Read())
            {
                Console.WriteLine((string)sdr["Name"]);
            }
            sdr.Close();
            con.Close();

  得到SqlDataReader后,就可以在While循环语句中调用Reader()方法遍历记录,Reader()将游标移动到下一条记录(第一次调用时移动到第一条记录),同时返回一个布尔值显示是否还有更多的行

  当SqlDataReader遇到数据库里的空值时,它返回一个常量DBNull.Value。试图访问该值或转换它的数据类型会产生异常。因此,在可能出现空值时,必须使用如下的代码对其进行测试:

  if(reader["name"]==DBNull.Value)

  {...}

  else

  {...}

  每次执行命令并不要求只能返回一个结果集。每个命令可以执行多个查询,并返回多个记录集。这在读取大量相关的数据时特别有用,比如产品和产品类别共同组成的产品目录。 

  命令会在两种情况下返回多个结果集:

1.调用存储过程时,该存储过程有多个SELECT语句

2.直接使用文本命令时,可以把用分号(;)分隔的命令批次执行。并不是所有的提供程序都支持这种技术,不过SQL Server数据库提供程序支持。

string sql=@"Selecct top 5 EmployeeID,FirstName,LastName from Employees;"+

       "Selecct top 5 ContactName,ContactTitle from Customers;"+

       "Selecct top 5 SupplierID,CompanyName,ContactName from Suppliers";

  该字符包含三个查询。它的执行结果会返回Employees表的前五条记录,Customers表的前五条记录以及Supplies表的前五条记录。

  处理这些的方法。开始时SqlDataReader提供对Employees表的访问,通过Read()方法读取全部记录后,就可以通过NextResult()方法询问下一个记录集了。当没有其他记录集时,该方法返回false。可以通过while循环遍历所有的结果集,但需要注意的是,在读取完第一个记录集前不要调用NextResult()方法

     do
            {             
                while (sdr.Read())
                {                    
                    for (int fields = 0; fields < sdr.FieldCount; fields++)
                    {
                        Console.WriteLine(sdr.GetName(fields).ToString());                        
                        Console.WriteLine(sdr.GetValue(fields).ToString());
                        
                    }                    
                }            
                
            } while (sdr.NextResult());  

SqlCommand类

 SqlCommand表示一个SQL命令,并封装了执行SQL命令的功能,它同时也支持带参数的SQL命令。SqlCommand类的 Parameter属性是一个SqlParameter列表,通过它可以管理里这个命令所需要的参数。包括添加和删除参数,设置参数的值等。

 SqlParameter类的属性使用得比较广泛,通常为它的属性指定特定的值即可。其中比较重要的属性包括如下几个,这也是在使用一个SqlParameter时必须指定的属性。

  (1)ParameterName:表示参数的名称,以“@参数名”的格式来表示

  (2)DbType和SqlDbType:表示该参数的类型,它是SqlDbType枚举类型该枚举类型的各个值将Sql数据类型与.NET数据类型相关联

  (3)Value和SqlValue:表示该参数的值,该值得具体类型与DbType和SqlDbType相对应

在SqlCommand执行带参数的SQL命令之前,必须要为SqlCommand添加需要SqlParameter对象。

     string connStr = "";
            SqlConnection conn = new SqlConnection(connStr);
            //打开数据库连接
            conn.Open();
            string SelectSQL = "select * from customers where customerid=@customerid";
            SqlCommand cmd = new SqlCommand(SelectSQL,conn);
            cmd.Parameters.Add("@customerid",SqlDbType.NVarChar,50).Value="alfki".ToUpper();
            //写法二
            SqlParameter myParameter = new SqlParameter("@userID",SqlDbType.NVarChar,50);
            cmd.Parameters.Add(myParameter);

ADO.Net连接模式的更多相关文章

  1. asp&period;net学习之ado&period;net(连接模式访问)

    原文:asp.net学习之ado.net(连接模式访问)    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连 ...

  2. ADO&period;NET—两种连接模式

    一.ADO.NET简介 ADO.NET的名称起源于ADO(ActiveX Data Objects),这是一个广泛的类组,用于在以往的Microsoft技术中访问数据.用来访问数据库,.NET环境下首 ...

  3. ADO&period;NET 连接方式和非链接方式访问数据库

    一.//连接方式访问数据库的主要步骤(利用DataReader对象实现数据库连接模式) 1.创建连接对象(连接字符串) SqlConnection con = new SqlConnection(Co ...

  4. &period;Net 下高性能分表分库组件-连接模式原理

    ShardingCore ShardingCore 一款ef-core下高性能.轻量级针对分表分库读写分离的解决方案,具有零依赖.零学习成本.零业务代码入侵. Github Source Code 助 ...

  5. 关于ADO&period;NET连接ORACLE,使用ODAC连接中的一些问题

    ADO.NET连接ORACLE时,用到ODAC组件时,有几点注意的. 1.安装的具体方法见:http://jingyan.baidu.com/article/e4511cf336ce872b845ea ...

  6. 转:ADO&period;NET连接字符串

    名称 ADO.NET连接字符串 说明 ADO.NET连接字符串:SQL Server,SQL Server 2005,ACCESS,Oracle,MySQL,Interbase,IBM DB2,Syb ...

  7. vc&plus;&plus;用ADO方式连接oracle问题

    今天装了个oracle客户端,准备写个访问远程oracle的程序.用的是vs2010,采用ADO的连接方法连接oracle,结果运行的时候总是报下面的错: 从提示可以看出是没有找到OraOLEDBup ...

  8. 简单区分VMware的三种网络连接模式&lpar;bridged、NAT、host-only&rpar;

    艺搜简介 VMware在安装时默认安装了两块虚拟网卡,VMnet1和VMnet8,另外还有VMnet0.这些虚拟网卡的配置都是由Vmware虚拟机自动生成的,一般来说不需要用户自行设置. Vmware ...

  9. VMware虚拟系统 bridged、NAT、host-only三种网络连接模式

    目录 前言 bridged(桥接模式) NAT(网络地址转换模式) host-only(仅主机模式) 总结 前言 如果你想利用VMWare安装虚拟机,或想创建一个与网内其他机器相隔离的虚拟系统,进行特 ...

随机推荐

  1. fir&period;im Weekly - Mobile developer 利器分享

    工欲善其事,必先利其器.本期 fir.im Weekly 推荐了很多优秀的 Github 项目.iOS/Android 开发工具利器,比如墨__守独立开发的macOS App -- Repo, 帮助 ...

  2. 网络之AFNetsorking

    AFNetsorking作为功能全面的网络第三方,既通俗好用又与时俱进-及时的更新使用了NSURLSession,不得不爱. AFNetsorking使用: 1,AFNetsorking GET请求 ...

  3. java-两个大数相加

    题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...

  4. Linux 命令速查

    学生信,Linux是最最基本的技能,要尽量将自己的工作平台转移到Linux,编程写脚本,这样会极大的提升工作效率,找工作时也不会太怂.Linux所有的任务都是通过命令来完成的,具有高度的统一性.Lin ...

  5. 存储入门 – RAID技术(大图解释)

    对于RAID,一直都知道个概念,但是对于细节没有去仔细的研究过.正好昨天Training的时候, 老师讲解了RAID的内容,所以顺便就整理一下.很多内容都是参考了ISMv2这本书. RAID中用到的技 ...

  6. 第二章 Background &amp&semi; Borders 之 Multiple borders

    2. Multiple Boerders 多边框 在工作中我们可能会遇到给盒子外层实现多个边框.如以下效果: 方法1: 实现这个效果,其实很简单,使用CSS3 的box-shadow属性,先看看box ...

  7. Jersey&lpar;1&period;19&period;1&rpar; - Building URIs

    A very important aspects of REST is hyperlinks, URIs, in representations that clients can use to tra ...

  8. 学c语言做练习

    /*编写一个函数,其功能是使输入字符串反序.在一个使用循环语句为这个函数提供输入的完整 程序中进行测试.*/ #include<stdio.h> #include<string.h& ...

  9. bzoj 2229&colon; &lbrack;Zjoi2011&rsqb;最小割

    Description 小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: "对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点s,t不在同 ...

  10. Lodop打印表格带页头页尾 高度是否包含页头页尾

    通过设置TableHeightScope,可以实现对ADD_PRINT_TABLE,表格带页头页尾,查看本博客另一篇博文:Lodop打印表格带页头页尾 自动分页每页显示头尾 超文本超过打印项高度,会自 ...