zoukankan      html  css  js  c++  java
  • ADO.Net连接模式

    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);

  • 相关阅读:
    vs2013配置opencv2.4.13(txt中复制粘贴即可,一次配置永久使用)
    描述性统计量
    Ubuntu创建、删除文件与目录
    Linux下服务器端开发流程及相关工具介绍(C++)
    TCP 协议如何保证可靠传输
    真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程
    Windbg程序调试--转载
    原来问题在这里-我的memory leak诊断历程
    用WinDbg分析Debug Diagnostic Tool生成的Userdump文件
    一个内存增长问题的分析和处理(三)
  • 原文地址:https://www.cnblogs.com/yk1992/p/3599220.html
Copyright © 2011-2022 走看看