摘要:在本文演示了如何使用C# Builder Personal中使用ADO.NET方法,連接到一個MSDE數據庫,並創建一個表,插入和選擇記錄,然後在一個數據網格(DataGrid)中顯示記錄。
C# Builder一大新特色就是可以使用Borland Data Providers for ADO.NET在設計時用來支持連接並操作數據庫,特定的用於DB2、InterBase、Oracle、SQL Server/MSDE等的驅動程序,以及添加第三方驅動程序(如dbExpress)的潛力。 然而,C# Builder Personal不帶有Borland Data Providers,這就意味著你只能采用"最簡單的"ADO.NET方法。
在本文中,我將介紹如何使用C# Builder Personal與簡單的ADO.NET結合,連接到一個MSDE數據庫,創建一個表,插入記錄,從這個表中選擇記錄,然後在一個數據網格(DataGrid)中顯示。
我假定你已經安裝了MSDE(C# Builder中帶有--包括Personal版)。
SqlConnection
啟動C# Builder,並且點擊File | New - C# Application來啟動一個新建項目。 放置一個SqlConnection控件,並且設置Connection屬性為
Data Source=.; Initial Catalog=master; Integrated security=SSPI
注意master是一個帶有MSDE的數據庫,但是你可以使用任何其他數據庫或者.NET數據庫管理系統(必須因此修改ConnectionString)。
在WinForm上放置一個按鈕,設置標題為"Connect",並且在button_Click事件處理程序中輸入下面的代碼來打開sqlConnection(注意我再次設置ConnectionString屬性,但是這次只是介紹如何在"純粹"在代碼中設置)。
private void button1_Click(object sender, System.EventArgs e)
{
try
{
sqlConnection1.ConnectionString = "Data Source=.; Initial Catalog=master; Integrated security=SSPI";
sqlConnection1.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
這是第一個測試,並且是最容易失敗的(所有其他的步驟都是很容易的)。 如果出現異常,那麼必須修改ConnectionString來確定它包含正確的引用(注意:當然還要確定SQL Server / MSDE是運行的)。
SqlCommand
一旦你可以產生一個成功的連接,就是放置SqlCommand控件的時候了。這是一個可用於執行命令的控件:SQL語句。 你可以使用對象檢驗器(Object Inspector)指出Connection屬性為SqlConnection控件,並且放置在CommandText屬性中執行的命令。 注意用於Connection屬性的下拉ComboBox看上去並不象列出SqlConnection控件,但是"竅門"就是雙擊屬性值(這就列出所有可能的值)。 另一種方法是輸入你想使用的控件的名稱,所以"s"將立刻選擇"sqlConnection1"。 為了再次清除Connection屬性,你需要鍵入"(",這將導致再次出現"(none)"。
因為可能看看如何使用"純"代碼做這些事情是非常有益的,我現在將在源代碼中指定所有必需的屬性值(包括我想執行的SQL命令)。
所以,放置另一個按鈕,設置標題為"SQL",並且在button_Click事件處理程序中編寫下面的代碼來創建一個表(如果這個表存在,那麼首先要刪除它),並且插入三個記錄:
private void button2_Click(object sender, System.EventArgs e)
{
try
{
sqlCommand1.Connection = sqlConnection1;
sqlCommand1.CommandText = "drop table test42";
try
{
sqlCommand1.ExecuteNonQuery(); // 創建表
}
catch {}; // 忽略
sqlCommand1.CommandText = "create table test42 (id int NOT NULL, name nvarchar(42))";
sqlCommand1.ExecuteNonQuery(); //創建表
sqlCommand1.CommandText = "insert into test42 values(1, 'Bob Swart')";
sqlCommand1.ExecuteNonQuery(); //插入表
sqlCommand1.CommandText = "insert into test42 values(2, 'Erik Mark Pascal Swart')";
sqlCommand1.ExecuteNonQuery(); //插入表
sqlCommand1.CommandText = "insert into test42 values(3, 'Natasha Louise Delphine Swart')";
sqlCommand1.ExecuteNonQuery(); // 插入表
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注意第一個try-catch程序塊只是在表不存在的情況下用來忽略異常的(在這樣情況下你不能刪除表)。
我必須使用SqlCommand的ExecuteNonQuery方法,因為這個SQL語句不返回數據,並且只意味著刪除表,創建一個新表或者插入新的記錄(顯然,ExecuteNonQuery還必須在刪除記錄的時候被調用)。
SqlDataAdapter、DataSet和DataGrid
既然我們已經建立了與MSDE " master "數據庫的連接,並且創建了一個帶有三個記錄的表" test42 ",現在是時間來選擇數據並且把它們連接到表格中了。 因為這個目的,我想使用三個控件:一個SqlDataAdapter、一個DataSet和一個顯然用來顯示數據的DataGrid。
首先放置一個SqlDataAdapter控件。 這個控件還有用於SelectCommand、InsertCommand、UpdateCommand和DeleteCommand的子屬性。 這些命令中的每一個都是相當於一個我們在前面章節中使用的SqlCommand控件。 這次,我們只需要SelectCommand,你必須指定它的Connection屬性,然後CommandText屬性中指定一個SELECT語句(注意,我再次在代碼中完成這些工作)。
現在,放置一個DataSet控件。 這個DataSet將被SelectCommand的結果填充。 順便說一句,與Delphi不同,.NET DataSet可以包含多個表。
最後,放置一個DataGrid控件。 我們可以指定DataGrid的DataSource和DataMember屬性為連接DataSet和Table,以便浏覽數據。配置DataGrid,使它更好看些(我將跳過這個步驟,把精力集中在Data Components)。
下面這段代碼初始化SqlDataAdapter控件的SelectCommand屬性,並且使用SelectCommand來填充DataSet,最終把它綁定到DataGrid上(在第三個按鈕的button_click事件處理程序中):
private void button3_Click(object sender, System.EventArgs e)
{
try
{
sqlDataAdapter1.SelectCommand.Connection = sqlConnection1;
sqlDataAdapter1.SelectCommand.CommandText = "select * from test42";
sqlDataAdapter1.Fill(dataSet1, "MyTable42");
dataGrid1.DataSource = dataSet1;
dataGrid1.DataMember = "MyTable42"; // same name as above
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
注意,在這段代碼中填充DataSet(被SqlDataAdapter)時指定的名稱與綁定DataSet到DataGrid時指定的DataMember屬性值同名。
這將在DataGrid中顯示select語句的輸出,如下:
正如你所看到的,SqlConnection與數據庫通訊,然後SqlCommand和SqlDataAdapter使用Connection來執行命令(並且使用結果選擇性地填充.NET DataSet)。
總結
如果你想很快的重復每一件事(快速應用軟件開發方法),那麼這裡有一些步驟可以幫助你(假定master數據庫和帶有記錄的test42表已經存在)。
啟動一個新的C# Builder工程
放置一個SqlConnection控件
設置ConnectionString屬性(這是唯一的"自定義"部分),如下:
Data Source=.; Initial Catalog=master; Integrated security=SSPI
放置一個SqlDataAdapter控件
指出SelectCommand.Connection屬性為SqlConnection控件
在CommandText屬性裡編寫一個select語句,例如:
select * from test42
放置一個DataGrid控件
使用"Auto Format"連接DataGrid格式
在窗體上雙擊,出現WinForm_Load事件處理程序。 在這裡,我們將編寫代碼使用SqlDataAdapter.SelectCommand.CommandText的結果填充一個新的DataSet,然後把它綁定到DataGrid,代碼如下:
private void WinForm_Load(object sender, System.EventArgs e)
{
try
{
DataSet ds = new DataSet();
// sqlConnection1.Open(); // implicit
sqlDataAdapter1.Fill(ds, "MyTable42");
dataGrid1.DataSource = ds;
dataGrid1.DataMember = "MyTable42"; // same name as above
sqlConnection1.Close(); // explicit
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
保存、編譯並且運行程序(確定SQL Server / MSDE還運行著)。
DataGrid現在將顯示SQL select命令的結果,說明SqlConnection、SqlDataAdapter(以及SqlCommand)和DataSet控件的使用。
注意在上面代碼中,我已經使用SqlConnection.Open()和Close()語句來解釋連接將被自動打開,但是必須被顯式地關閉。
結論
在本文中介紹了如何使用C# Builder Personal與簡單的ADO.NET結合,連接到一個MSDE數據庫,創建一個表,插入記錄,從這個表中選擇記錄,然後在一個數據網格(DataGrid)中顯示。