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.net学习之ado.net(连接模式访问)

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

  2. ADO.NET—两种连接模式

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

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

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

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

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

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

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

  6. 转:ADO.NET连接字符串

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

  7. vc++用ADO方式连接oracle问题

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

  8. 简单区分VMware的三种网络连接模式(bridged、NAT、host-only)

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

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

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

随机推荐

  1. Hard Process(二分)

    Hard Process Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submi ...

  2. Linux转发性能评估与优化-转发瓶颈分析与解决方式(补遗)

    补遗 关于网络接收的软中断负载均衡,已经有了成熟的方案,可是该方案并不特别适合数据包转发,它对server的小包处理非常好.这就是RPS.我针对RPS做了一个patch.提升了其转发效率. 下面是我转 ...

  3. unix系统非roo账号安装JDK

    AIX系统用户rusky(非root用户,没有权限修改/etc/profile和/etc/environment文件 )直接解压JDK.zip文件,解压后把JAVA目录拷贝到/home/rusky目录 ...

  4. 【贪心】【POJ3154】墓地雕塑(Graveyard, NEERC 2006, LA 3708)需要稍稍加工的(先贪心,再确保能这样贪(可行性&&如果可行必定最优&&非证明最优性)的题)(K)

    例题4  墓地雕塑(Graveyard, NEERC 2006, LA 3708) 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放),希望所有n+m个雕塑在圆周 ...

  5. .net如何后台批量删除

    button_Click(Sender sender,Event e){foreach (DataListItem item in DataList1.Items){CheckBox cbox=(Ch ...

  6. 设置Proxy Server和SQL Server实现互联网上的数据库安全

    ◆首先,我们需要了解一下SQL Server在WinSock上定义协议的步骤: 1. 在”启动”菜单上,指向”程序/Microsoft Proxy Server”,然后点击”Microsoft Man ...

  7. SQL子句执行顺序和Join的一点总结

    SQL子句执行顺序和Join的一点总结 FROM ON JOIN WHERE GROUP BY WITH CUBE or WITH ROLLUP HAVING SELECT DISTINCT ORDE ...

  8. web在线聊天系统。非ajax轮询

    利用php的死循环和刷新缓冲区实现.   浏览器发送请求到PHP获取消息页面. php接收到来之浏览器请求后. 循环获取数据库里面的消息.   当存在消息的时候.PHP告诉浏览器.我有消息给你.你接受 ...

  9. 使用SelectClipRgn注意事项

    SelectClipRgn 函数功能:该函数选择一个区域作为指定设备环境的当前剪切区域. 函数原型:int SelectClipRgn(HDc hdc, HRGN hrgn): 参数: hdc:设备环 ...

  10. ActiveX异步回调JavaScript

    ActiveX异步回调JavaScript 开发环境:VC6.0. 背景知识:COM/ActiveX/JavaScript/MFC/Thread 想必用过Ajax的童鞋们都知道xmlhttp这个东西吧 ...