ADO.NET笔记

 

 

10.3.170.127

 

 

 

1.ADO.NET有俩个特别重要的核心:DataSet和Data Provider

 

2.Connection对象、Command对象、DataReader对象以及DataAdapter 是四大核心骨架

 

3.Parameter对象定义了命令和存储过程的输入、输出和返回值参数。

 

 

4.sql注入

 

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"

 

userName = "' OR '1'='1";

 

 

passWord = "' OR '1'='1";

 

然后就有

      strSQL = "SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"

 

 

5.现在我们用Parameter对象来改写简单的登陆验证代码:

复制代码

 

1 strSQL = "SELECT * FROM users WHERE Name = @Name and Password = @Password";

2 SqlParamter[] paras = new SqlParamter[]{//参数数组

3     new SqlParamter("@Name",SqlDBType.Varchar,50)

4      new SqlParamter("@Password",SqlDBType.Varchar,50)};

5 paras[0].value = userName;//绑定用户名

6 paras[1].value = password;//绑定用户密码

 

复制代码

 

 

6.

    ConnectionStringBuilder:它提供一种用于创建和管理由 Connection 对象使用的连接字符串的内容的简单方法。

   所有 ConnectionStringBuilder 对象的基类均为 DbConnectionStringBuilder 类。

 

 

    CommandBuilder :它自动生成 DataAdapter 的命令属性或从存储过程中派生参数信息,并填充 Command 对象的 Parameters 集合。

   所有 CommandBuilder 对象的基类均为 DbCommandBuilder 类。

 

 

7.几种典型的字符串连接

   

    (1)SQL SEVER的字符串连接

     Data  Source=myServerAddress;Initial Catalog=myDataBase; User  Id=myUsername;Passwword=myPassword;

 

 

     Data Source:需要连接的服务器。需要注意的是,如果使用的时Express版本的SQL Server需要在服务器名后加\SQLEXPRESS。例如,连接本地的SQL Server 2008 Express版本的数据库服务器,可以写成Data Source = (local)\SQLEXPRESS或者.\SQLEXPRESS。

 

     Initial Catalog:默认使用的数据库名称。

 

     User ID:数据库服务器账号。

 

     Password:数据库服务器密码。

 

   

   或者额可以写成:

      Server = myServerAddress;Database = myDataBase; User ID=myUsername;Password=myPassword;Trusted_Connection=False;

 

 

 

   (2)可信连接

 

         Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;

 

         说明:

 

         Data Source:与上述相同。

 

         Initial Catalog:与上述相同。

 

         Integrate Security:使用存在的windows安全证书访问数据库。

       

        或者是:Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

 

 

   (3) Access连接字符串

 

        Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=admin;Password=;

   (4) MySQL连接字符串

 

      Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

 

    (5) DB2连接字符串

 

      Server=myAddress:myPortNumber;Database=myDataBase;UID=myUsername;PWD=myPassword;

 

    (6) Oracle连接字符串

 

      Data Source=TORCL;User Id=myUsername;Password=myPassword;

 

   

   8.在配置文件中存储连接字符串

 

  

      

  

 

   我们只需要在程序中添加相应代码来获取配置文件中的值:

 

   string connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();

 

 

   9.Connection对象

 

 

   (1) 必须掌握的几个方法

 

Open: 使用 ConnectionString 所指定的设置打开数据库连接。

 

Dispose: 释放由 Component 使用的所有资源。

 

Close: 关闭与数据库的连接。 此方法是关闭任何已打开连接的首选方法。Close 方法回滚任何挂起的事务。 然后,它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接。

 

    (2) 必须掌握的几个属性

 

Database: 在连接打开之后获取当前数据库的名称,或者在连接打开之前获取连接字符串中指定的数据库名。

 

DataSource: 获取要连接的数据库服务器的名称。

 

ConnectionTimeOut: 获取在建立连接时终止尝试并生成错误之前所等待的时间。

 

ConnectionString: 获取或设置用于打开连接的字符串。

 

State: 获取描述连接状态的字符串。

 

(3) 说说ConnectionState

 

上面我们知道,State属性描述了与数据源的连接的当前状态。ConnectionState是一个枚举类型。它包括以下成员:

 

Closed: 连接处于关闭状态。

 

Open: 连接处于打开状态。

 

Connecting: 连接对象正在与数据源连接。

 

Executing: 连接对象正在执行命令。

 

Fetching: 连接对象正在检索数据。

 

Broken: 与数据源的连接中断。

 

 

 

    数据库连接池

 

 

     接到数据库服务器需要经历几个漫长的过程:建立物理通道(例如套接字或命名管道),与服务器进行初次握手,分析连接字符串信息,由服务器对连接进行身份验证,运行检查以便在当前事务中登记

 

     连接池的行为可以通过连接字符串来控制,主要包括四个重要的属性:

 

    Connection Timeout:连接请求等待超时时间。默认为15秒,单位为秒。

    Max Pool Size: 连接池中最大连接数。默认为100。

    Min Pool Size: 连接池中最小连接数。默认为0。

    Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。

  

   eg:SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder();

            connStr.DataSource = @".\SQLEXPRESS";

            connStr.InitialCatalog = "master";

            connStr.IntegratedSecurity = true;

 

            connStr.Pooling = true; //开启连接池

         connStr.MinPoolSize = 0; //设置最小连接数为0

            connStr.MaxPoolSize = 50; //设置最大连接数为50            

            connStr.ConnectTimeout = 10; //设置超时时间为10秒

 

            using( SqlConnection conn = new SqlConnection(connStr.ConnectionString))

            {

                ;//todo

            }

 

 

   

      Command对象与数据检索

 

 

     Command对象:它封装了所有对外部数据源的操作(包括增、删、查、改等SQL语句与存储过程),并在执行完成后返回合适的结果。

 

 

      必须掌握的几个属性

 

CommandText: 获取或设置对数据源执行的文本命令。默认值为空字符串。

 

CommandType: 命令类型,指示或指定如何解释CommandText属性。CommandType属性的值是一个枚举类型,定义结构如下:

 

public enum CommandType   

{      Text = 1,    //SQL 文本命令。(默认。)         

        StoredProcedure = 4,    // 存储过程的名称。         

        TableDirect = 512    //表的名称。 

}

 

需要特别注意的是,将CommandType 设置为 StoredProcedure 时,应将 CommandText 属性设置为存储过程的名称。 当调用 Execute 方法之一时,该命令将执行此存储过程。

 

Connection: 设置或获取与数据源的连接。

 

Parameters: 绑定SQL语句或存储过程的参数。参数化查询中不可或缺的对象,非常重要。

 

Tranction: 获取或设置在其中执行 .NET Framework 数据提供程序的 Command 对象的事务。

 

4. 必须掌握的几个方法

 

ExecuteNonQuery: 执行不返回数据行的操作,并返回一个int类型的数据。

 

     注意:对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。 对于其他所有类型的语句,返回值 为 -1。

 

ExecuteReader: 执行查询,并返回一个 DataReader 对象。

ExecuteScalar: 执行查询,并返回查询结果集中第一行的第一列(object类型)。如果找不到结果集中第一行的第一列,则返回 null 引用。

 

 

 

 

   5.如何创建Command对象

 

   (1)通过构造函数

       string strSQL = "Select * from tb_SelCustomer";

       SqlCommand  cmd = new SqlCommand(strSQL,conn);

     或者

     (2)通过Command对象的属性

      SqlCommand cmd = new SqlCommand();

      cmd.Connection = conn;

cmd.CommandText = strSQL;

 

   例子:

     namespace Command

{

    class Program

    {

        static void Main(string[] args)

        {

            string connSQL = @"Data Source=.\SQLEXPRESS; Initial Catalog=db_MyDemo; Integrated Security=SSPI";//构造连接字符串

            SqlConnectionStringBuilder connStr = new SqlConnectionStringBuilder(connSQL);

 

            using(SqlConnection conn = new SqlConnection(connStr.ConnectionString))

            {

                //拼接SQL语句

                  StringBuilder strSQL = new StringBuilder();

                strSQL.Append("insert into tb_SelCustomer ");

                strSQL.Append("values(");

                strSQL.Append("'liuhao','0','0','13822223333','[email protected]','广东省深圳市宝安区',12.234556,34.222234,'422900','备注信息')");

 

                Console.WriteLine("Output SQL:\n{0}",strSQL.ToString());

 

                //创建Command对象

                  SqlCommand cmd = new SqlCommand();

                cmd.Connection = conn;

cmd.CommandType = CommandType.Text;

cmd.CommandText = strSQL.ToString();

 

                try

                {

                    conn.Open();//一定要注意打开连接

 

                       int rows = cmd.ExecuteNonQuery();//执行命令

                       Console.WriteLine("\nResult: {0}行受影响",rows);

                }

                catch(Exception ex)

                {

                    Console.WriteLine("\nError:\n{0}", ex.Message);

                }

            }

 

            Console.Read();

        }

    }

}

     

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(ADO.NET笔记)