先前的一個SQL基礎複習,有點粗枝大葉,不夠具體、詳細! 複習整理的,有很多屬性和方法也沒提到,隻是說了一下常用的、基礎的屬性和方法!
一切都歸因于老師的教導有方!
注意命名空間的引入:
using System.Data;
using System.Data. OleDb; //用于OLEDB提供器支援的資料庫
using System.Data. Odbc; //用于ODBC資料提供器支援的資料庫的資料
using System.Data.SqlClient; //用于sql server資料庫
五大對象:
Connection對象:建立與資料源的連接配接
Command對象:檢索,插入,删除,修改資料
DataReader對象:隻讀,隻向前的方式檢索資料
DataAdapter對象:資料庫和資料集互動的橋梁
DataSet對象:看成是駐留在記憶體中的一個小型資料庫
四種典型的連接配接類
OdbcConnection
OleDbConnection
SqlConnection
下面是以對SQL Server資料庫的操作
一、Connection對象:連接配接資料源
1.建立Connection對象:
string strCon="Data Source="user8\\SQLEXPRESS";Initial Catalog=studentdb";
SqlConnection myConnection=new SqlConnection(strCon);
2.屬性:
(1).ConnectionString:指定連接配接資料庫所需的值字元串格式的描述
Data Source=服務名; Initial Catalog=資料庫名; User ID=使用者名; Password=密碼; //Integrated Security=True;
如: //SQL Server驗證(注意轉義字元:\),混合驗證
ConnectionString="Data Source=user8\\SQLEXPRESS;Initial Catalog=studentdb; User ID=sa;Passward=pws;"
//windows驗證
ConnectionString="Data Source="user8\\SQLEXPRESS";Initial Catalog=studentdb; Integrated Security=true;"
(2).State:隻讀屬性,表示連接配接狀态
(3).Pooling:當為 true 時,請求新的連接配接時從池中取出,預設是true
(4).Connect Timeout( Connection Timeout):等待伺服器響應的時間(機關:秒). 預設值:15。
(5).Provider:指打開資料庫的驅動程式
3.方法:
(1).Open() //根據連接配接串,打開連接配接
(2).Close() //關閉連接配接,釋放資源
4.事件:
(1).StateChange:此事件發生在連接配接的狀态發生更改時
(2).InforMessage:此事件發生在從資料源傳回資訊性消息或警告時
二、Command對象:執行相關指令
1.建立Command對象:
string strSql="";//SQL指令
(1).SqlCommand com=new SqlCommand(strSql,connection);
(2).SqlCommand com=connection.CreateCommand(strSql);
2.屬性
(1).Connection:連接配接對象
(2).CommandText:要執行的SQL指令(SQL語句或存儲過程)
(3).CommandType:預設值是Text,執行sql語句;并可設定為StoredProcedure,執行存儲過程;TableDirect,訓示所包含的是要通路的一個表的名稱,從此表中将取出所有的列和行
(4).Parameters:Parameters集合
(5).Transaction:執行指令所在的事務
3.方法
(1).ExecuteNonQuery():傳回執行指令受影響的行數,用于增删改操作
(2).ExecuteScalar():傳回執行sql語句的第一行第一列的值,用于查詢單列值
(3).ExecuteReader ():傳回一個DataReader對象[隻向前、隻讀的結果集],用于查詢多個資料
4.對于Parameters集合:
(1).屬性:
<1>.Count屬性:擷取集合中參數的數目;
<3>.SqlDbType:将該屬性設定為參數的資料類型。
設定SqlParameter對象的資料類型的方法有以下兩種。
在DbType枚舉中選擇一個值賦給DbType屬性
在SqlDbType枚舉中選擇一個值賦給SqlDbType屬性
<4>.Size:設定該屬性以訓示參數大小,例如字元串參數中字元的個數。 無需為已知且具有固定大小的資料類型(例如DbType.Int32)指定大小
<5>.Direction:設定該屬性以訓示該參數是隻輸入參數、隻輸出參數、雙向參數 還是存儲過程的傳回值。
該屬性可設定為ParameterDirection枚舉值之一: ParameterDirection.Input、ParameterDirection.InputOutput、 ParameterDirection.Output或ParameterDirection.ReturnValue。預設方向為 ParameterDirection.Input
<6>.Value:對于隻輸入參數或雙向參數而言,在運作該指令之前需要設定Value屬性。
對于隻輸出參數、雙向參數和存儲過程的傳回值而言,在運作該指令之後可以檢索Value屬性
(2).方法:
<1>.Add():将參數添加到集合中;
<2>.Clear():從集合中移除所有參數;
<3>.Insert():将參數插入集合中的指定索引位置;
<4>.Remove():從集合中移除所指定的參數;
(3).建立參數對象:
<1>.第一種方式: cmd.Parameters.add(new SqlParameter("@customerid","ALFKI"));
<2>. 第二種方式 :
SqlParameter myPara=new SqlParameter();
myPara .ParameterName="@customerid";
myPara.value="ALFKI";
cmd.Parameters.Add(myPara);
5.對于ExecuteReader ()方法傳回一個DataReader對象
(1).DataReader的建立:sqlDataReader rdr=cmd.ExecuteReader();
(2).屬性:
<1>.FieldCount:字段數
<2>.HasRows:是否有資料未讀
<3>.IsClosed:判斷DataReader對象是否關閉
(3).方法:
<1>.GetValue():擷取指定字段的值
<2>.GetOrdinal():擷取字段的序号
<3>.Read():判斷并讀取下一條記錄
<4>.Close():關閉對象
還有方法:GetInt32()\GetName()\NextResult()\IsDBNull()
三、Adapter資料擴充卡對象:資料庫和資料集的橋梁(斷開環境)
DataAdapter是和資料集(DataSet)一起使用的對象,資料庫與資料集之間起橋梁作用;專門為處理脫機資料而設計的。
1.建立DataAdapter對象:
string strSql="select * from studentsTb";
(1).用查詢串和連接配接字元串
SqlDataAdapter da=new SqlDataAdapter (strSql,strConn);
該方式會為每個SqlDataAdapter 建立一個新的SqlConnection對象,應适當選擇。
用查詢串和連接配接對象 SqlConnection cn=new sqlConnection(strConn);
(2).SqlDataAdapter da=new SqlDataAdapter (strSql,cn);
比較常用的方式
(3).使用SqlCommand對象
SqlCommand cmd=new SqlCommand(strSql,CN);
SqlDataAdapter da=new SqlDataAdapter (cmd);
已存在一個SqlCommand對象時使用.
2.屬性:
(1).SelectCommand:在資料源中檢索資料的資料指令
(2).InsertCommand:在資料源中插入資料的資料指令
(3).UpdateCommand:在資料源中更新資料的資料指令
(4).DeleteCommand:在資料源中删除資料的資料指令
(5).TableMappings:DataTableMapping對象的集合,決定DataSet中的行與資料源之間的關系
(6).UpdateBatchSize:決定批程序支援,指出在批進行中可執行的指令的數量
3.方法:
(1).Fill()
<1>. Fill(DataSet) :DataSet結果集
<2>. Fill(DataTable): DataTable對象
<3>. Fill(Int32,Int32,params DataTable[]):開始記錄索引 ,要填充的資料表的行數, DataTable對象
<4>.Fill(DataSet, Int32,Int32,String) :DataSet結果集,對象 開始記錄的索引 ,要填充的資料集的行數 ,表名
(2).Update()
4.對于TableMappings屬性的應用
(1).先建立SqlDataAdapter對象
SqlDataAdapter adapter = CreateDataAdapter(conn, age);
DataSet ds = new DataSet();
(2).Mappings的用法
DataTableMapping mapping = adapter.TableMappings.Add("Table", "學生表");
mapping.ColumnMappings.Add("SNO", "學生編号");
mapping.ColumnMappings.Add("SName", "學生姓名");
mapping.ColumnMappings.Add("SDept", "所在院系");
mapping.ColumnMappings.Add("SClass", "所在班級");
mapping.ColumnMappings.Add("SSex", "性别");
mapping.ColumnMappings.Add("SAge", "年齡");
(3).資料填充
adapter.Fill(ds);
(4).dataGridView綁定顯示
dataGridView1.DataSource = ds.Tables["學生表"];//使用設定好的映射表名字
dataGridView1.Refresh();
5.Update()方法的應用
(1).資料填充
string strSql="SELECT * FROM STUDENT";
adapter.SelectCommand = new SqlCommand(strSql, conn);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
dataGridView1.Refresh();
更新時的代碼:
adapter.Update(ds);
MessageBox.Show("更新成功");
6.DataAdapter的事件
(1).Disposed:當調用Dispose釋放元件的時候調用。
(2). FillError:在填充操作過程中出現錯誤時傳回。
(3). RowUpdating:在對資料源執行指令前的Update過程中發生,試圖進行更新,是以激發該事件。
(4). RowUpdated:在對資料源執行指令後的Update過程中發生,試圖進行更新,是以激發該事件。
四、DataSet:資料集
1.DataSet 層次結構中的類:DataTable\DataColumn\DataRow\DataTableCollection\DataCloumnCollection\DataRowCollection\
2.對于DataTable對象允許通路資料集中被通路的Rows集合,有如下方法: Add()\InsertAt()\Find()\Select()\Remove()
對于DataTable對象允許通路資料集中被通路的Columns集合,有如下方法: Add()\InsertAt()\Find()\Select()\Remove()
3.建立DataTable
//建立一個DataTable的一個執行個體。
DataTable dt = new DataTable("學生表");
//聲明列對象
DataColumn column;
column = new DataColumn();
//設定列的資料類型
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "學生編号";
column.ReadOnly = true;
column.Unique = true;
//向DataTable添加該列
dt.Columns.Add(column);
//建立一個新行
row = dt.NewRow();
//為建立立的行添加資料
row["學生編号"] = Convert.ToInt32(txtID.Text.ToString());
row["學生姓名"] = txtName.Text;
//為該表添加指定的行
dt.Rows.Add(row);
//綁定資料為DataGridView
dataGridView1.DataSource = dt;
dataGridView1.Refresh();
4.DataTable的Select方法 三個參數:
(1). String:篩選條件
(2).String:排序表達式
(3).RowStateValue:一個值,訓示要以什麼版本或狀态進行篩選。這是一個枚舉值。如 :DataViewRowState.CurrentRows。
示例代碼:
DataTable dataTable = new DataTable("學生表臨時");
dataTable = dt.Clone();
string expression = "學生編号 = " + Convert.ToInt32(txtID.Text.ToString());
//按照條件篩選資料
DataRow[] foundRows = dt.Select(expression);
//周遊查詢出來的結果并将其綁定到DataGridView2上。
foreach(DataRow dr in foundRows)
{
DataRow dataRow = dataTable.NewRow();
dataRow[0] = dr[0];
dataRow[1] = dr[1];
dataTable.Rows.Add(dataRow);
}
//綁定資料為DataGridView
dataGridView2.DataSource = dataTable;
dataGridView2.Refresh();
5.DataTable對象的SELECT方法的功能非常強大,但它效率低,windows web窗體都不支援綁定到select方法的傳回值,dataView類能彌補select的局限性. DataView屬性:
(1).RowFilter:此屬性用來指定用來過濾記錄的字元串格式的表達式/條件。滿足條件的記錄将隻被包括在視圖中。
(2).RowStateFilter:此屬性指定此 DataView 傳回的資料的版本。
(3).Sort:此屬性用來指定将按其排序記錄的表達式。表達式包括列名稱和排序限定符,其為 ASC 或 DESC,以升序或降序來顯示記錄。
本文轉自SanMaoSpace部落格園部落格,原文連結:http://www.cnblogs.com/SanMaoSpace/archive/2011/11/15/2250375.html,如需轉載請自行聯系原作者