?? ado.txt
字號:
2.5 執行事務處理
private void SQLCommandTransction(string sServer, string sDB)
{
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
SqlTransaction trans;
//start a local transaction
cn.Open(); //注意 ,連接必須在BeginTransaction()方法前打開
trans=cn.BeginTransaction();
cmd.Connection = cn;
cmd.Transaction = trans;
try
{
//insert a row Transaction
cmd.CommandText="INSERT INTO Department VALUES(100,'Transaction 100')";
//This will result in an error
cmd.CommandText="INSERT INTO Department VALUES(100,'Transaction 101')";
cmd.ExecuteNonQuery();
trans.Commit();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
trans.Rollback(); //此方法回滾事務處理
}
finally
{ cn.Close(); }
}
3.1 使用SqlDataReader檢索快速的,只向前的結果集
private void SQLReaderForward(string sServer, string sDB)
{//set up the connection and command
Cursor.Current=Cusor.WaitCursor;
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
sqlCommand cmd = new sqlCommand("select customerID,commpanyName from Customers"+"where country ='USA',cn");
cmd.CommandType=CommandType.Text;
SqlDataReader rdr;
try
{
cn.Open(); //先連接
rdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);//再實例化rdr,用cmd的ExecuteReader()方法
//ExecuteReader()方法使用CommandBehavior枚舉,其成員CloseConnection是指關閉SqlDataReader對象時,關閉相關的connection 對象cn.
lstResults.Items.Clear(); //列表框清空
while(rdr.Read())
{
lstResults.Items.Add(rdr["CustomerID"].ToString()+'\t'+rdr["CompanyName"].ToString());
}
rdr.Close();
}
catch(Exception ex)
{
Cursor.Current=Cusor.Default;
MessageBox.Show(ex.Message);
}
cn.Close();
Cursor.Current=Cusor.Default;
}
說明:在此事例(從NorthWind數據庫中檢索相關信息)中,先創建一個連接對象cn,它使用集成的安全性關聯目標數據庫,接著創 建一個新的命令對象cmd,構造函數把其Command屬性設為SQL語句;
同時明白顯示的關閉所有的ADO.NET對象非常重要.
3.2 返回多個結果集
private void SQLReaderMultipleRS(string sServer, string sDB)
{//set up the connection and command
Cursor.Current=Cusor.WaitCursor;
SqlConnection cn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
sqlCommand cmd = new sqlCommand("select CategoryID,CategoryName from Categories;"+"select ProductID,ProduceName from products",cn"); //多個SQL語句要分號(;)分開!
cmd.CommandType=CommandType.Text;
SqlDataReader rdr;
try
{ //open the connection and create the reader
cn.Open(); /
rdr=cmd.ExecuteReader(CommandBehavior.CloseConnection);
//loop through all the results sets
lstResults.Items.Clear();
bool bMoreResults=true; //賦true,確保至少做一次循環
while(bMoreResults)
{ lstResults.Items.Add(rdr.GetName(0)+'\t'+rdr.GetName(1));
while(rdr.Read())
{ //把列名寫道列表框中,在明處加制表符,使列表框整齊排列
lstResults.Items.Add(rdr.GetInt32(0)+'\t'+rdr.GetString(1));
}
bMoreResults=rdr.NextResult(); //此方法:若還有一個結果集,NextResult()方法就返回true;否則返回flase,退出while循環
rdr.Close();
}
catch(Exception ex)
{
Cursor.Current=Cusor.Default;
MessageBox.Show(ex.Message);
}
cn.Close();
Cursor.Current=Cusor.Default;
}
---080327晚上
DataSet是ADO.NET的核心,它是一個保存在內存中的數據庫,標號斯組成數據表的一組相關數據,約束規則和表關系信息.
因為DataSet完全獨立于數據源,所以在DataSet對象在中對數據的修改不會影響數據源,除非把這些修改內容返回到數據源中.
...圖片...
創建新的DataSet對象有幾種不同的方式,所用的創建方法取決于要創建的DataSet的類型.
可以通過調用DataSet構造函數來創建DataSet,所創建的DataSet 對象為一個空對象.當采用該方法創建時,可以指定DataSet名稱,如果不指定則默認為NewDataSet.
也可以用DataSet.Copy方法創建DataSet,復制已有的DataSet.此方法會把原先DataSet的模式或關系結構,所有的數據行,行版本和行狀態信息都復制到新的DataSet中.
4.1
private void CreateDataSet(string sDSName)
{
DataSet ds = new DataSet(sDSName);
//使用構造函數創建一個空的DataSet對象實例ds.
}
4.2
private void CreateDataSet(string sDSName)
{
DataSet ds = new DataSet();
ds.Tables.Add(sDSName); //用DataTablesCollection.Add方法創建的DataTable,并把它添加到DataSet的Table集合中.
}
4.3
private void CreateDataColumn(string sDSName)
{
DataTable dt =new DataTable();
DataColumn dc =new DataColumn(sDSName,System.Type.GetType("System.String")); //創建一個類型為DataColumn的字符串,并把列名設置為傳遞進來的字符串變量.
dc.AllowDBNull = false;
dc.Maxlength = 50;
dt.Columns.Add(dc); //把名位dc的 DataColumn對象添加到表 的Columns集合中
dt.Columns.Add("RowCount",System.Type.GetType("System.Int32"),"Count("+dc.ColumnName+")");
//上面這句...使用DataColumnCollection.Add 方法創建一個名為RowCount的新的DataColumn對象,并添加到DataTable中.
DataRow dr =dt.NewRow(); //使用NewRow()方法創建一個新的DataRow對象 dr,然后把數據放在DataRow指定的列中
dr[sDSName] ="Michael";
dt.Rows.Add(dr); //最后把名為dr的DataRow對象實例添加到DataTable的Rows集合中.
}
注意:在把行添加到表中,會計算count表達式,并使RowCount列的數據自動更新為1,表示已經把一行添加到DataTable中了.
4.4
private void CreateDataConsraint(string sUCName,string sPKName)
{ DataTable dt =new DataTable();
DataColumn dc =new dt.Columns.Add(UCName);
dt.Columns.Add(sPKName);
UniqueConstraint uc =new UniqueConstraint(dc);
dt.Constraint.Add(uc);
DataColumn[] dtkey =new DataColumn[1];
dtkey[0] =dt.Columns[sPKName]; //把DataColumn數組dtkey設為名為sPKName的DataColumn對象實例
dt.PrimaryKey =dtkey; //把DataColumn數組dtkey 設為DataTable的主鍵
}
說明:例程開頭傳遞兩個包含新的DataColumn名稱的字符串變量.用Add方法和兩個傳遞進來的字符串變量創建兩個DataColumn,并添加到dt中;
接著用UniqueConstraint構造函數和名為dc的DataColumn參數創建uc;然后使用Add方法添加到DataTable中.
4.5
private void CreateDataRelation(string sDRelName)
{ DataSet dsSales =new DataSet("Sales");
DataTable dtStaff =dsSales.Tables.Add("Products");
DataTable dtInvoices =dsSales.Tables.Add("Invoices");
DataColumn dcParent =dtStaff.Columns.Add("productID");
DataColumn dcChild =dtInvoiecs.Columns.Add("productID");
DataRelation drelSales =new DataRelation(sDRelName,dcPart,dcChild,true);
dsSales.Relations.Add(drelSales);
}
說明:該事例創建一個名為productID的DataColumn,并添加到連個DataTable的Columns集合中;接著把傳遞近來的字符串變量作為DataRelation名,利用兩個DataTable中用于建立表之間關系的DataColumn,創建一個DataRelation對象實例drelSales;最后添加到DataSet中.
5.1 用SqlDataAdapter類填充DataSet
private void FillDataSetSql(string sServer, string sDB,string sTable)
{ //次方法對應的三個參數分別用作SQL SERVER系統名稱,數據庫名稱,表名稱.
SqlConnection Sqlcn = new sqlConnection("SERVER="+sServer+";INTERGATED SECURITY=Ture";DATABASE="+sDB);
SqlCommand cmdSelect = new SqlCommand("SELECT * FROM"+sTable,Sqlcn);
SqlDataAdapter SqlDA = new SqlDataAdapter();
SqlDA.SelectCommand=cmdSelect;
DataSet ds =new DataSet();
try
{
SqlDA.Fill(ds,sTable);
}
catch(Exception ex)
{
MessageBox.Show("Fill SqlDataAdapter erreo::"+ex.Tostring());
}
grdResults.DataSorce =ds; //DataGrid控件
grdResults.DataMember =sTable; //其DataMember屬性設為表,并顯示給用戶
}
說明:創建 SqlConnection對象實例的ConnectionString屬性設為構造函數參數;而 SqlCommand對象的CommandText屬性設為一個SQL Select語句,且把Connection屬性設為前面創建的Sqlcn對象實例;
創建SqlDataAdapter對象實例,并把它的SelectCommand屬性設為SqlCommand對象,接著創建空的DataSet對象,在Try-Catch中用Fill 方法填充;用該方法是,若連接每打開,它會自動打開與之相關聯的連接,如果Fill 方法打開了連接,也會在填充完DataSet后自動關閉連接.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -