c# ADO.NET 訪問數據庫


ADO.NET 的主要組件

ADO.NET 結構圖

.NET 數據提供程序類型

.NET Framework 數據提供程序

說 明

SQL Server .NET 數據提供程序

Microsoft SQL Server 數據源 System.Data.SqlClient 命名空間

OLE DB .NET 數據提供程序

Access 、OLE DB 公開的數據源 System.Data.OleDb 命名空間

ODBC .NET 數據提供程序

ODBC 公開的數據源 System.Data.Odbc 命名空間

Oracle .NET 數據提供程序

Oracle 數據源 System.Data.OracleClient 命名空間

 

Connection 對象

命名空間

對應的 Connection 對象

System.Data.SqlClient

SqlConnection

System.Data.OleDb

OleDbConnection

System.Data.Odbc

OdbcConnection

System.Data.OracleClient

OracleConnection

 

 1 // 定義數據庫連接字符串
 2 string connString =
 3       "Data Source= . ;Initial Catalog=MySchool;User ID=jbit;pwd=bdqn";
 4 
 5 // 創建 Connection 對象
 6 SqlConnection connection = new SqlConnection(connString);
 7             
 8 // 打開數據庫連接
 9 connection.Open();
10 Console.WriteLine("打開數據庫連接成功");                
11             
12 //關閉數據庫連接
13 connection.Close();
14 Console.WriteLine("關閉數據庫連接成功");

Connection 主要成員

 

屬性名稱

 

說 明

 

ConnectionString

 

連接字符串

 

方法

 

說 明

 

Open()

 

打開數據庫連接

 

Close()

 

關閉數據庫連接

必須顯式關閉連接

 

另一種實現:自動關閉數據

using (SqlConnection conn = new SqlConnection(ConnStr))
                {
                   //代碼塊
                }
tip:當執行完該using(){}后,數據庫連接就會自動關閉

連接數據庫步驟

使用ADO.NET連接數據庫的步驟

1.定義連接字符串

Data Source=服務器名;Initial Catalog=數據庫名; User ID=用戶名;Pwd=密碼

2. 創建 Connection 對象

SqlConnection connection = new SqlConnection(connString);

3. 打開與數據庫的連接

connection.Open( );

示例代碼:

// 連接字符串
string connString =  "Data Source=.;Initial Catalog=pubs;User ID=sa";
// 創建Connection 對象       
SqlConnection connection = new SqlConnection(connString);
connection.Open( );  // 打開數據庫連接
//……
connection.Close( ); // 關閉數據庫連接

 


 

Command

Command 的主要成員

屬性名稱

說明

Connection

Command對象使用的數據庫連接

CommandText

執行的SQL語句

方法

說 明

ExecuteNonQuery()

執行不返回行的語句,如UPDATE等

ExecuteReader()

返回DataReader對象

ExecuteScalar()

返回單個值,如執行帶COUNT(*)的SQL語句

 

使用 Command 步驟

1. 創建數據庫連接

2. 定義 SQL 語句

3. 創建 Command 對象(執行命令前,必須打開數據庫連接!)

4. 執行命令

1 SqlConnection connection = new SqlConnection(connString);
2 string sql = "select count(*) from Admin where LoginId=' " + userName
3     + " ' and LoginPwd=' " + pwd + " ' ";
4 connection.Open();  // 打開數據庫連接
5 SqlCommand command = new SqlCommand(sql, connection);
6 int num = (int)command.ExecuteScalar();

 

總結

一、.NET數據提供程序包括四個核心對象

Connection

Command

DataAdapter

DataReader

二、Connection對象用於建立應用程序和數據庫之間的連接

三、Command對象的ExecuteScalar()方法可以檢索數據庫並返回一個值

四、數據庫操作過程中可能出現異常,可以使用try-catch-finally語句處理異常

 

DataAdapter和DataReader的區別

SqlDataReader 高效,功能弱,只讀訪問
SqlDataAdapter 強大,要求資源也大一點

SqlDataReader 只能在保持跟數據庫連接的狀態下才可以讀取。。。

SqlDataAdapter 大多情況下是一次性讀取一個表,然后填充到DataSet中,然后就可以斷開跟數據庫的連接了。(可以理解查詢出來的數據都放到的內存中)

兩者區別主要是   在線 和 離線 的區別。。。。。

 


 

使用ADO.NET查詢和操作數據

 

StringBuilder類

StringBuilder類: 用來定義可變字符串

方法

說明

StringBuilder Append(string value )

 

在結尾追加

 

StringBuilder Insert(int index, string value )

 

在指定位置插入指定字符串

 

StringBuilder Remove(int startIndex, int length )

 

移除指定字符串

 

以下SQL語句哪個可讀性更高,更易修改?

代碼一

SELECT SubjectNo,SubjectName,ClassHour,Grade FROM  Subject

 

代碼二

SELECT
              [ SubjectNo ],
              [ SubjectName ],
              [ ClassHour ],
              [ Grade ]
FROM
              [ Subject ]

答案肯定是第二種

 

優勢舉例

常規

string strText  = "Hello";
strText += "World";
Console.WriteLine( strText );

優化后

使用StringBuilder類修改上述代碼

 StringBuilder sbTest = new StringBuilder();
 sbTest.Append("Hello");
 sbTest.Append("World");
 Console.WriteLine(sbTest .ToString ());
 Console.ReadLine();

使用StringBuilder后,感覺代碼更多了,我們為什么還要用它呢?

其實,我們在“常規”聲明的string變量在2次賦值時,程序是給變量划分了2個內存空間,對計算機性能有損耗!

精准的說:“常規”每次修改strText,不是追加而是都要創建一個 新的字符串對象,如果用StringBuilder sbTest = new StringBuilder();創建對象做為變量,他不會有內存損耗,同樣系統也不會多次創建對象。


 

DataReader讀取數據庫

DataReader 對象

1.從數據源中檢索只讀、只進的數據流

2.每次讀取一行數據

命名空間

對應的 DataReader 對象

System.Data.SqlClient

System.Data.OracleClient

System.Data.OleDb

OleDbDataReader

System.Data.Odbc

OdbcDataReader

System.Data.OracleClient

OracleDataReader

 

 

要查詢多行多列的數據,需要使用Command對象的ExecuteReader( )方法

 1 SqlDataReader reader = comm.ExecuteReader();//獲得DataReader對象
 2 // 3 //循環讀取數據行並顯示
 4  while (reader.Read())
 5  {
 6              sb1.AppendFormat("{0}\t{1}", reader["StudentNo"], 
 7              reader["StudentName"]);
 8              Console.WriteLine(sb1);
 9              sb1.Length = 0;
10 }
11 //
12 reader.Close(); //關閉DataReader

DataReader 的主要成員

屬性

說明

HasRows

是否返回了結果

方法

說明

Read

前進到下一行記錄

Close

關閉 DataReader 對象
DataReader 使用后必須關閉

 

DataReader 使用步驟

使用 DataReader 檢索數據的步驟

1. 創建 Command 對象

2. 調用 ExecuteReader() 創建 DataReader 對象

3. 使用 DataReader 的 Read() 方法逐行讀取數據

4. 讀取某列的數據,(type)dataReader[ ]

5. 關閉 DataReader 對象

 

讀取某列的數據,(type)dataReader[ ]

獲取某列的值:

方法一:指定列的索引,從0開始

方法二:指定列名


操作數據

 

使用SqlCommand對象的ExecuteNonQuery() 方法向數據庫增加記錄

 1 StringBuilder sb = new StringBuilder();
 2 sb.AppendLine("INSERT INTO");
 3 sb.AppendLine("          [Grade]");
 4 sb.AppendLine("VALUES");
 5 sb.AppendLine("           ('" + gradeName + "')");
 6 
 7 // 創建command對象
 8 SqlCommand command = new SqlCommand(sb.ToString(), conn);
 9 // 執行命令
10 command.ExecuteNonQuery();  
11 //……

 

ExecuteNonQuery()方法小結

1.該方法執行指定的 SQL 語句

2.返回受影響的行數

使用 ExecuteNonQuery() 的步驟

1.創建 Connection 對象

2.定義SQL語句

3.創建 Command 對象

4.執行 ExecuteNonQuery() 方法

5.根據返回的結果進行處理


總結

一、DataReader對象是一個只進、只讀的數據流,每次從數據源中提取一條記錄

二、通過Command對象的ExecuteReader()方法返回一個DataReader對象

三、使用Command對象的ExecuteNonQuery()方法可以執行數據源數據的增刪改操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM