ADO.net操作數據庫總結


ADO.net操作數據庫總 

ADO.net操作數據庫總結
一.用SqlConnection連接SQL Server
1..加入命名空間
using System.Data.SqlClient;
2.連接數據庫
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "user id=sa;password=sinofindb;initial catalog=test;data source=127.0.0.1;Connect Timeout=30";
myConnection.Open();
改進(更通用)的方法:
string MySqlConnection="user id=sa;password=sinofindb;Database =test;data source=127.0.0.1;Connect Timeout=30";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
二。用OleDbConnection連接
1.加入命名空間
using System.Data.OleDb;
2.連接sql server
string MySqlConnection="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=test;Integrated Security=SSPI;";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
3.連接Access(可通過建立.udl文件獲得字符串)
string MySqlConnection="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:db2000.mdb;
Persist Security Info=False;
4.連接Oracle(也可通過OracleConnection連接)
string MySqlConnection="Provider=MSDAORA;Data Source=db; user id=sa;password=sinofindb";
三.創建Command對象
1.SqlCommand 構造函數
①初始化 SqlCommand 類的新實例。
  public SqlCommand();
  SqlCommand myCommand = new SqlCommand();
②初始化具有查詢文本的 SqlCommand 類的新實例。public SqlCommand(string);
  String mySelectQuery = "Select * FROM mindata";
  SqlCommand myCommand = new SqlCommand(mySelectQuery);
③初始化具有查詢文本和 SqlConnection 的SqlCommand類實例。
  Public SqlCommand(string, SqlConnection);
  String mySelectQuery = "Select * FROM mindata";
  string myConnectString = "user     id=sa;password=;database=test;server=mySQLServer";
  SqlConnection myConnection = new SqlConnection(myConnectString);
  SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection);
④初始化具有查詢文本、SqlConnection 和 Transaction 的 SqlCommand 類實例。
  public SqlCommand(string, SqlConnection, SqlTransaction);
  SqlTransaction myTrans = myConnection.BeginTransaction();
  String mySelectQuery = "Select * FROM mindata";
  string myConnectString = "user   id=sa;password=;database=test;server=mySQLServer";
  SqlConnection myConnection = new SqlConnection(myConnectString);
  SqlCommand myCommand = new SqlCommand(mySelectQuery,myConnection, myTrans);
2.建立SqlCommand與SqlConnection的關聯。
  myCommand.Connection = myConnection;
  或者:SqlCommand myCommand = myConnection.CreateCommand;
3.設置SqlCommand的查詢文本。
  myCommand.CommandText = "Select * FROM mindata";
  或者第2種構造:SqlCommand myCommand = new SqlCommand(mySelectQuery);
  給SqlCommand對象提供兩個查詢字符串,每個查詢字符串訪問不同的表,返回不同的結果集。兩個查詢語句用分號分隔。
4. 執行命令。
  ExecuteReader
  返回一行或多行
  ExecuteNonQuery
  對 Connection 執行 Transact-SQL 語句並返回受影響的行數(int)
  ExecuteScalar
  返回單個值(如一個聚合值).返回結果集中第一行的第一列。忽略額外的列或行
  ExecuteXmlReader
  將 CommandText 發送到 Connection 並生成一個 XmlReader 對象。
  SqlDataReader myReader = myCommand.ExecuteReader();
  或SqlDataReader myReader =     myCommand.ExecuteReader(CommandBehavior.CloseConnection);
  while(myReader.Read()) //循環讀取數據
  {
      Console.WriteLine(myReader.GetString(0));// 獲取指定列的字符串形式的值
      Console.WriteLine(myReader. GetValue(1));// 獲取以本機格式表示的指定列的值
  }  
  CommandText = "select count(*) as NumberOfRegions from region";
  Int count = (int) myCommand.ExecuteScalar();
關於OleDbCommand對象的使用。
四.DataReader的使用
1.遍歷結果集
  while (myReader.Read())
  Console.WriteLine("tt", myReader.GetInt32(0), myReader.GetString(1));
  myReader.Close();
2.使用序數索引器。
  while (myReader.Read())
  Console.WriteLine("tt", myReader[0].ToString(),   myReader[1].ToString());
  myReader.Close();
3.使用列名索引器。
  while (myReader.Read())
  Console.WriteLine("tt", myReader["code"].ToString(),   myReader["name"].ToString());
  myReader.Close();
4.使用類型訪問器。
  public char GetChar(int i); 獲取指定列的單個字符串形式的值
  public DateTime GetDateTime(int i); 獲取指定列的 DateTime 對象形式的值
  public short GetInt16(int i); 獲取指定列的 16 位有符號整數形式的[C#]
  public string GetString(int i); 獲取指定列的字符串形式的值
ADO.net基本名詞解釋與學習記錄(一)
 數據的規范化:是把數據盡可能的分解到多個表上,最小化重復相同數據的次數。
  ADO.net的主要對象元素:
  數據源:通常指的是一個關系數據庫,如SQLserver等
  托管的數據供應程序:提供數據倉庫通信的功能 如ODBC等
  Connection對象:建立一個頁面程序與數據庫驅動的通信管道
  Command對象:一個包含讀寫數據指令的工具
  DataReader/DataSet對象:存儲已讀出或寫入數據的地方
  .Net控件:主要指< asp:datagrid>
  Connection對象:主要用於連接數據源
  通過Open()方法打開連接字符串中的連接
  連接字符串包含3各部分的信息:
  >> 第一部分指定要使用的供應程序或驅動程序的種類 //server=localhost
  >> 第二部分指定要使用的數據庫   //database=Mydatabase
  >> 第三部分通常包含安全信息,包括用戶名,密碼等 //uid=foolboy;pwd=Mypasswd
  
  Command對象和DataReader:讀取和修改數據
  Command用法:
  objCommand = new OleDbCommand(strSQL,objConnection);
  objDbDataReader = objCommand.ExecuteReader();
  DataReader:存儲數據
  讀取方法 DataReader["FIELD"]
  
  數據綁定:
  是在數據源和數據使用者創建一個連接的過程。
  主要是指綁定到DataGrid上
  DataReader的局限:
  >> 只能讀取數據,不能修改數據
  >> 只能向前循環數據
  >> 只能處理一個表的數據
  DataSet是他的替代品還是DataTable??他們的主要區別?
  
  DataSet和DataTable對象
  DataSet表示數據庫中的數據,與DataReader不同它可以存儲幾個表和他們之間的關系。
  在使用表示主要要用到下面4各對象:
  >> DataTable: 表示表本身
  >> DataSet: 核心對象,建立多表之間的adhoc關系,可以一表中的一行和另一表的一行關聯起來
  >> DataAdapter: 用於結果從Connection傳給Dataset。Fill()方法把數據拷貝到DataSet中, Update()方法把DataSet中的數據烤回數據源。
  >> DataView: 表示DataSet中存儲的DataTables的特定視圖
  >> DataGrid: 等的DataSource最終只綁定到某具體DataView上
  
  ADO.net關於SQL Server的對象
  sqlConnection
  sqlCommand
  sqlDataAdapter
  數據異常處理
  常見問題:
  >> 代碼包含對不存在的ADO.NET對象的引用
  >> 代碼請求的數據為NULL不存在
  >> 代碼的連接字符串錯誤
  >> 包含不存在的列或表的引用
  >> 沒有提供正確的UserID和Password
  >> 代碼是用語法不正確的SQl語句
  >> 網絡問題導致數據庫連接問題
  處理方法:
  利用 try ....catch 捕獲錯誤信息
  更新數據方法
  問題:
  >> 如何更新?我們的修改都是基於斷開連接的,如果將修改后的結果寫入數據庫中?
  >> 如何處理同步更新?兩個人先后對更新了同一數據,怎么辦?結果會被覆蓋么?
  DataSet & DataTable & DataRow關系如下所示:
 --------------------------------------
   |      DataSet         |
   |   |-------------------------|  |
   |   |   DataTable      |  |
   |   |             |  |
   |   |   |----------------| |  |
   |   |   |  DataRow   | |  |
   |   |   |----------------| |  |
   |   |   |  DataRow   | |  |
   |   |   |----------------| |  |
      |   |-------------------------|  |
   |------------------------------------|
  DataTable = DataSet.Tables["TName"];
  DataRow = DataTable.Rows;
  string strFirstName = DataRow[0]["FirstName"];
  
  這里的更新的實質都是對數據集DataSet的更新方法,沒有涉及到對數據源的更新
  更新操作思路:
  1.添加記錄 (添加行)
  添加記錄首先需要聲明兩個變量 DataTable ,DataRow
  其中DataTable需要實例化到具體的數據集中的某個table
  DataRow = DataTable.NewRow() 聲明為Table的新Row
  再對DataRow進行賦值,調用DataTable.Rows.Add(DataRow)即可
  2.修改紀錄 (編輯行)
  首先聲明一個變量 DataRow[] objRows用來存儲要編輯的行
  objRows = DataTable.Select("查詢條件");
  如果是一行,可以這樣 objRows = DataTable.Rows[3];
  再對其進行修改 如 objRows[0][FIELD1]="" objRows[0][FIELD2]=""
  3.刪除紀錄
  如下 DataTable.Rows[5].Delete();
  推想:應該可以這樣,首先申明一個變量 DataRow[] objRows 用來存儲要刪除的行
  objRows = DataTable.Select("查詢條件");
ADO.net基本名詞解釋與學習記錄(二)
  更新數據源的方法
  1,Command對象
  更新需要的屬性:
  Connection  包含數據倉庫連接的細節
  CommandText  要運行的命令
  CommandType  命令的類型 Sql字符或存儲過程的名稱
  Text  表示文本字符串sql
  TableDirect 表示表名
  StoredProcedure 表示存儲過程的名稱
  Parameters  Parameters對象的一個集合
  
  2,DataAdapter對象
  注意DataAdapter和Command的區別?
  >> Command主要用於運行命令
  >> DataAdapter主要用於為多個命令提供一個存儲空間,在數據倉庫和DataSet之間提供  雙向交互。
  哦,一個Command對象只能處理查詢,添加,刪除,修改中的一種
  因此 DataAdapter用四個屬性存儲四種Command對象屬性如下 SelectCommand,UpdateCommand,InsertCommand,DeleteCommand
  
  3,CommandBuilder對象
  OleDbCommandBuilder objBuilder
  objBuilder = new OleDbCommandBuilder(DataAdapter)
  表示告訴命令生成器可以在哪兒取到SelectCommand,以建立其他的命令.
  
  DataAdapter.UpdateCommand = objBuilder.GetUpdateCommand();
  DataAdapter.InsertCommand = objBuilder.GetInsertCommand();
  DataAdapter.DeleteCommand = objBuilder.GetDeleteCommand();
  
  注意在這種情況下,SelectCommand必需帶有一個主鍵字段
  
  4.DataAdapter.Update()
  
  DataAdapter.Update(DataSet,"Tablesname");
  
  例如,以下代碼確保首先處理表中已刪除的行,然后處理已更新的行,然后處理已插入的行。
  [C#]
  DataTable updTable = custDS.Tables["Customers"];
  
  // First process deletes.
  custDA.Update(updTable.Select(null, null, DataViewRowState.Deleted));
  
  // Next process updates.
  custDA.Update(updTable.Select(null, null, DataViewRowState.ModifiedCurrent));
  
  // Finally, process inserts.
  custDA.Update(updTable.Select(null, null, DataViewRowState.Added));
  
  其中DataViewRowState數據視圖的操作屬性 包括Deleted, ModifiedCurrent,Added,Unchanged等
  
  至此,更新數據倉庫工作完成。
  
  使用存儲過程
  存儲過程類似於代碼中的函數,它存儲在數據服務器上並有一個名稱。
  為什么要使用存儲過程?
  1.龐大復雜的SQL語句影響程序代碼的閱讀
  2.由數據庫服務器來處理的存儲過程比直接使用SQL語句更快,效率更高
  
  要使用存儲過程,需要注意的是CommandType設為StoredProccess CommandText為存儲過程的名稱
  
  eg: objCmd.CommandText = "[Sales by Category]";
  objCmd.CommandType = CommandType.StoreProcedure;
  
  使用XML
  由於ADO.net設計時就考慮到了XML,它處理XML數據就像是這些數據來自於一個數據庫
  
  1,寫入XML文件
  objAdapter.Fill(objDataSet,"Employees"); //填充結果集
  objDataSet.WriteXml(Server.MapPath("Employees.xml"));//寫入到xml文件
  注意兩點:
  1,首先用到了DataSet的WriteXml()方法,從DataSet中提取信息並格式化xml
  2,Server.MapPath()表示生成文件路徑,指向當前應用程序的目錄
  2,讀取XML文件
  objDataSet.ReadXml(Server.MapPath("Employees.xml"));
  
  3,將Xml轉換為字符串
  string strXML,strSchema
  strXML = objDataSet.GetXml()
  strSchema = objDataSet.GetXmlSchema()
  4,一旦XML讀入到DataSet中他就同從數據庫中讀入的數據沒有任何區別,也可以進行前面任何的操作,最終只要將操作的結果集DataSet寫入至XML或者數據庫都可以

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: