c#資料操作:資料庫訪問 和 檔案操作
資料操作
一、資料庫訪問
ADO.NET概述
.NET名字的由來可參考如下連結:【趣聞】.NET為什麼被叫做.NET
微軟公司的資料訪問技術所走過的幾個階段:
ODBC: (Open Database Connectivity)是微軟公司開放服務結構中有關資料庫的一個組成部分,它建立了一組規範,並提供了一組對資料庫訪問的標準API(應用程式程式設計介面)。 DAO: (Data Access Objects) 資料訪問物件是第一個物件導向的介面,它顯露了 Microsoft Jet 資料庫引擎,並允許 Visual Basic 開發者通過 ODBC 象直接連線到其他資料庫一樣,直接連線到Access 表。DAO 最適用於單系統應用程式或小範圍本地分佈使用。 RDO: OLE DB(Object Linking and Embedding, Database):基於COM(component object model),支援非關係資料的訪問 ADO:基於OLE DB ,更簡單、更高階、更適合Visual Basic程式設計師。 ADO.NET: 基於.NET體系架構,優化的資料訪問模型和基於COM的ADO是完全不同的資料訪問方式。 |
連線資料庫:
以SqlConnection類為例記錄。
以下程式碼的功能:設定連線引數、建立SQL Server連線、斷開連線。
using System;
using System.Data.SqlClient;
namespace ADO_SqlConnection
{
/// <summary>
/// 連線SQLServer資料庫示例
/// </summary>
class T
{
/// <summary>
/// 連線SQLServer資料庫示例
/// </summary>
public void CreateSqlConnection()
{
//得到一個SqlConnection
SqlConnection myCon = new SqlConnection();
//構造連線字串
myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=sa;database=northwind;server=(local)";
//建立連線
myCon.Open();
//輸出連線狀態
Console.WriteLine("{0}",myCon.State); //輸出:Open
//斷開連線
myCon.Close();
//輸出連線狀態
Console.WriteLine("{0}",myCon.State); //輸出:Closed
}
/// <summary>
/// 應用程式的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
T t=new T();
t.CreateSqlConnection();
}
}
}
管理其他資料來源連線
同連線SQL Server資料庫類似,可以使用System.Data中其他的類來建立其他資料來源的連線,具體包括一下三類:
OleDbConnection:可管理OLE DB訪問的任何資料來源的連線 OdbcConnection:可管理通過使用連線字串 或 ODBC資料庫名稱建立資料來源連線。 OracleConnection:可管理Oracle資料庫連線
與資料庫互動:
使用DBCommand(統稱)物件表示一個SQL查詢或者一個儲存過程,而DataAdapter物件常用來把一個DBCommand遞交給資料庫。
DBCommand是一個統稱,包括以下4個類:
OleDbCommand: SqlCommand: OdbcCommand: OracleCommand: |
DBSqlCommand的使用
1.SqlCommand執行費查詢命令:.ExecuteNonQuery()
修改和查詢資料庫中的資料:()
SqlConnection myCon = new SqlConnection();
myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)";
myCon.Open();
//使用SqlCommand
SqlCommand selectCMD = new SqlCommand();
selectCMD.Connection=myCon;
selectCMD.CommandText="SELECT top 10 CustomerID, CompanyName FROM Customers";
//使用修改一行資料,完成非查詢的SQL操作
selectCMD.CommandText="UPDATE Customers SET CompanyName='Wangminli' WHERE CustomerID = 'ALFKI'";
int i=selectCMD.ExecuteNonQuery();//非查詢命令
Console.WriteLine("{0}行被修改。",i); //輸出:1行被修改。
//斷開連線
myCon.Close();
使用SqlCommand 執行查詢命令:
(1):使用自身的ExecuteReader 和 ExecuteXmlReader 方法,獲取只讀的資料,並存放於DataReader物件 和 XmlReader物件。
(2):本身只作為一條SQL語句 或者 一個儲存過程,結合後面的DataAdapter、DataSet實現資料查詢。
使用DataAdapter提交查詢命令
DataAdapter表示一組資料命令 和一個 資料庫連線,可以向資料庫提交DBCommand物件所代表的SQL查詢命令,同時獲取返回的資料結果集。
常用屬性:
SelectCommand:用於指定SqlDataAdapter所要提交的SQL語句,是最常用的屬性。 InsertCommand:插入SQL命令。 DeleteCommand: 刪除SQL命令。 |
方法:
Public abstract int Fill(DataSet dataSet); |
引數dataSet表示查詢結果所要填充的DataSet(後面介紹)
示例:
//連線資料庫
SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)");
myCon.Open();
//使用SqlCommand
SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers",myCon);
//獲取資料介面卡
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = selectCMD;
//提交查詢,獲取結果資料集
DataSet custDS=new DataSet();
custDA.Fill(custDS);
//斷開連線
myCon.Close();
管理記憶體資料
當完成對資料庫的查詢後,需要把所獲取的資料保留下來,ADO.NET使用資料集物件在記憶體中快取查詢結果資料。
資料集物件的結構類似於關聯式資料庫的表,包括表示表、行和列等資料物件模型的類,還包含為資料集定義的約束和關係。
在ADO.NET中,可以作為資料集物件的類如下所示:
System Data DataSet DataTable DataColumn Constraint DataRelation DataRow |
使用DataTable實現記憶體表
這些物件與ADO.NET中物件的對應關係:
資料表 →DataTable 資料列 →DataColomn 資料行 →DataRow 約束 →Constraint 關係 →DataRelation |
示例:
使用DataSet管理資料
對應關係:
DataSet → 資料庫 DataTable → 資料表 |
示例:
//連線資料庫
SqlConnection myCon = new SqlConnection();
myCon.ConnectionString = "Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)";
myCon.Open();
//使用SqlCommand提交查詢命令
SqlCommand selectCMD = new SqlCommand("SELECT CustomerID, CompanyName FROM Customers", myCon);
//獲取資料介面卡
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = selectCMD;
//填充DataSet
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
//顯示XML格式的資料
//Console.WriteLine("{0}",custDS.GetXml());
//顯示其中的DataTable物件中的資料
for(int i=0;i<custDS.Tables[0].Rows.Count;i++)
{
for(int j=0;j<custDS.Tables[0].Columns.Count;j++)
{
Console.Write("{0} ",custDS.Tables[0].Rows[i].ItemArray[j]);
}
Console.WriteLine();
}
//斷開連線
myCon.Close();
Console.Read();
使用DataReader獲取只讀資料
除了DataSet,還可以使用DataReader 來獲取資料。
示例:
//連線資料庫
SqlConnection myCon = new SqlConnection("Persist Security Info=False;User id=sa;pwd=123;database=northwind;server=(local)");
myCon.Open();
//使用SqlCommand
SqlCommand selectCMD = new SqlCommand("SELECT top 10 CustomerID, CompanyName FROM Customers",myCon);
//建立SqlDataReader
SqlDataReader custDR=selectCMD.ExecuteReader();
//輸出查詢的資料
while(custDR.Read())
{
Console.Write("{0} ",custDR.GetString(custDR.GetOrdinal("CustomerID")));
Console.Write("{0} ",custDR.GetString(custDR.GetOrdinal("CompanyName")));
Console.WriteLine();
}
//斷開連線
myCon.Close();
比較:DataSet 和 DataReader
通常來說,下列情況下適合使用DataSet。
1、 操作結果中含有多個分離的表。 2、 操作來自多個源(多個資料庫、XML的混合檔案)的資料。 3、 在系統的各個層之間交換資料。 4、 通過緩衝重複使用相同的行集合以提高效能。 5、 每行執行大量的處理。 6、 使用XML操作維護資料。 |
在應用程式需要以下功能時,則可以使用DataReader
1、 不需要緩衝資料。 2、 正在處理的結果集太大而不能全部放入記憶體中。 3、 需要迅速的一次性訪問資料,採用只向前的只讀方式。 |
二、檔案操作
在一些小的應用中,有時候不需要使用資料庫這樣大規模的資料管理工具,也很少進行資料的查詢、修改等操作,而僅用檔案來儲存資料,這時就需要使用.NET中的檔案操作物件,如File 、StreamReader、 streamWriter等。
使用File物件操作檔案
System.IO.File提供了一系列的靜態方法,完成對檔案的常用操作,如新建、刪除、拷貝、移動等。
常用方法:
Copy: Create: Delete: Exists: Move: Open/OpenText: OPenRead/OpenWrite: Move: |
讀寫檔案
1. 使用StreamWriter寫入檔案
常用的屬性和方法:
常用屬性:
AutoFlush: bool型別,指示是否每次呼叫Write後,將緩衝區輸出 Encoding: |
常用方法:
Close: Flush: 清理當前StreamWrite的所有緩衝區,並寫入所有緩衝資料。 Write: 寫入方法。 WriteLine:寫入方法,後跟行結束符。 |
構造方法:
public StreamWriter(Stream path, bool append, Encoding encoding); 引數: Path:路徑 append:是否追加 encoding:要使用的字元編碼 |
2. 使用StreamReader讀取檔案
屬性:
CurrentEncoding: 當前StreamReader正在使用的字元編碼 |
方法:
Close: Peek:返回下一個可用字元,但不使用它 Read:讀取輸入的下一個字元 或 下一組字元。 ReadBlock:從當前流中讀取最大數量的字元,並將資料寫入緩衝區中。 ReadLine: ReadToEnd:從流的當前位置到末尾讀取流。 |
整個示例:
|
相關文章
- C# 操作 access 資料庫C#資料庫
- sqlserver收縮資料庫、收縮資料檔案的操作SQLServer資料庫
- C#訪問MySQL資料庫C#MySql資料庫
- C#訪問SQLite資料庫C#SQLite資料庫
- 【Gin-API系列】配置檔案和資料庫操作(三)API資料庫
- 常用操作 / 資料庫操作資料庫
- C#:資料庫SQL操作通用類C#資料庫SQL
- 資料庫操作資料庫
- 資料庫操作·資料庫
- 資料庫歸檔以及flashbak操作資料庫
- C#連線和操作Oracle資料C#Oracle
- 轉發:C#操作SQL Server資料庫C#SQLServer資料庫
- C#的Access資料庫操作 AccessHelper類C#資料庫
- Oracle 資料庫常見檔案及相關操作Oracle資料庫
- MongoDB 資料庫操作MongoDB資料庫
- mongodb資料庫操作MongoDB資料庫
- MySQL 資料庫操作MySql資料庫
- laravel 資料庫操作Laravel資料庫
- django資料庫操作Django資料庫
- Ecos 資料庫操作資料庫
- 資料庫基本操作資料庫
- 【Falsk 使用資料庫】---- 資料庫基本操作資料庫
- Oracle資料庫中對BLOB資料的操作問題Oracle資料庫
- 用vb操作檔案或資料夾
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- C#快速搭建模型資料庫SQLite操作C#模型資料庫SQLite
- C#/Python/MATLAB操作PostgreSQL資料庫C#PythonMatlabSQL資料庫
- ACCESS資料庫C#操作類(包含事務)資料庫C#
- 資料庫——基礎(資料庫操作,表格操作)——增加高階查詢資料庫
- C# SQLite資料庫 訪問封裝類C#SQLite資料庫封裝
- 資料庫檔案和檔案組資料庫
- Mysql資料庫操作命令MySql資料庫
- Laravel 資料庫基本操作Laravel資料庫
- django操作多資料庫Django資料庫
- Go之資料庫操作Go資料庫
- PHP操作MySQL資料庫PHPMySql資料庫
- postgresql 資料庫基本操作SQL資料庫
- MySQL資料庫常用操作MySql資料庫