Visual C#自身沒有類庫,和其他的.Net開發語言一樣,Visual C#調用的類庫是.Net框架中的一個共有的類庫--.Net FrameWork SDK。ADO.NET是.Net FrameWork SDK提供給.Net開發語言進行數據庫開發的一個系列類庫的集合。在ADO.NET中雖然提供了大量的用於數據庫連接、數據處理的類庫,但卻沒有提供類似DbText組件、DbList組件、DbLable組件、DbCombox組件等。要想把數據記錄以ComBox、ListBox等形式顯示處理,使用數據綁定技術是最為方便、最為直接的方法。所謂數據綁定技術就是把已經打開的數據集中某個或者某些字段綁定到組件的某些屬性上面的一種技術。說的具體些,就是把已經打開數據的某個或者某些字段綁定到Text組件、ListBox組件、ComBox等組件上的能夠顯示數據的屬性上面。當對組件完成數據綁定後,其顯示字段的內容將隨著數據記錄指針的變化而變化。這樣程序員就可以定制數據顯示方式和內容,從而為以後的數據處理作好准備。所以說數據綁定是Visual C#進行數據庫方面編程的基礎和最為重要的第一步。只有掌握了數據綁定方法,才可以十分方便對已經打開的數據集中的記錄進行浏覽、刪除、插入等具體的數據操作、處理。
數據綁定根據不同組件可以分為二種,一種是簡單型的數據綁定,另外一種就是復雜型的數據綁定。所謂簡單型的數據綁定就是綁定後組件顯示出來的字段只是單個記錄,這種綁定一般使用在顯示單個值的組件上,譬如:TextBox組件和Label組件。而復雜型的數據綁定就是綁定後的組件顯示出來的字段是多個記錄,這種綁定一般使用在顯示多個值的組件上,譬如:ComBox組件、ListBox組件等。本文就是來詳細介紹如何用Visual C#實現這二種綁定。在數據庫的選擇上,為了使內容更加全面,采用了當下比較流行的二種數據庫,一種是本地數據庫Acess 2000,另外一種是遠程數據庫Sql Server 2000。
一. 本文程序設計和運行的軟件環境:
(1).微軟公司視窗2000服務器版
(2)..Net FrameWork SDK Beta 2
(3).MADC 2.6(Microsoft Acess Data Component)以上版本
二. 程序中使用的數據庫的數據字典:
(1).本地數據庫Access 2000的數據庫的名稱為"db.mdb",在這個數據庫中定義了一張表"person"。這張表的數據結構如下表:
(2).遠程數據庫Sql Server 2000的數據庫服務器名稱為"Server1",數據庫名稱為"Data1",登陸的ID為"sa",口令為空,在數據庫也定義了一張"person"表,數據結構如上表。
三. 數據綁定一般步驟:
(一).無論是簡單型的數據綁定,還是復雜型的數據綁定,要實現綁定的第一步就是就是要連接數據庫,得到可以操作的DataSet。下面二段代碼是分別連接Access 2000和Sql Server 2000數據庫,並獲得DataSet。
(1). 連接Access 2000,得到DataSet:
(2). 連接Sql Server 2000,得到DataSet:
// 設定數據連接字符串,此字符串的意思是打開Sql server數據庫,服務器名稱為server1,數據庫為data1(二).根據不同組件,采用不同的數據綁定:
對於簡單型的數據綁定,數據綁定的方法其實比較簡單,在得到數據集以後,一般是通過把數據集中的某個字段綁定到組件的顯示屬性上面,譬如TextBox組件和Label組件,是綁定到"Text"屬性。對於復雜型的數據綁定一般是通過設定其某些屬性值來實現綁定的。這些下面將會具體介紹。
四.簡單型組件的數據綁定:
注釋:此時綁定是Access 2000數據庫中"person"表的"xm"字段。
由此可以得到綁定TextBox組件的源程序代碼(TextBox01.cs),下列代碼操作的數據庫是Access 2000,如下:
public class Form1 : Form
{
private TextBox textBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
file://創建一個 OleDbConnection
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
myConn.Open ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , "person" ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
textBox1.DataBindings.Add ( "Text" , myDataSet , "person.xm" ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
得到TextBox組件對本地數據庫中的字段進行數據綁定的程序後,可以方便的得到對遠程數據庫中的某些字段進行數據綁定的源程序代碼(TextBox02.cs),具體如下:
public class Form1 : Form
{
private TextBox textBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
// 設定數據連接字符串,此字符串的意思是打開Sql server數據庫,服務器名稱為server1,數據庫為data1
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , " person " ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
textBox1.DataBindings.Add ( "Text" , myDataSet , "person.xm" ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
(2).Label組件的數據綁定:
注釋:此時綁定是Access 2000數據庫中"person"表的"xm"字段。由此可以得到Label組件數據綁定的源程序代碼(Label01.cs),本代碼操作數據庫是Access 2000:
public class Form1 : Form
{
private Label label1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
file://創建一個 OleDbConnection
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
myConn.Open ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , "person" ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
label1.DataBindings.Add ( "Text" , myDataSet , "person.xm" ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
} }
得到了Label組件對Access 2000數據庫數據綁定的程序代碼,改換一下程序中數據鏈接,就可以得到Label組件對Sql Server 2000數據庫數據綁定的源程序代碼(Label02.cs),具體如下:
public class Form1 : Form
{
private Label label1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
// 設定數據連接字符串,此字符串的意思是打開Sql server數據庫,服務器名稱為server1,數據庫為data1
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , " person " ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
label1.DataBindings.Add ( "Text" , myDataSet , "person.xm" ) ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
五. 復雜型組件的數據綁定:
在上面的介紹中,了解到對復雜型組件的數據綁定是通過設定組件的某些屬性來完成數據綁定的。首先來介紹一下ComboBox組件的數據綁定.
(1).ComboBox組件的數據綁定:
在得到數據集後,只有設定好ComboBox組件的的三個屬性就可以完成數據綁定了,這三個屬性是:、"DisplayMember"、"ValueMember"。其中"DataSource"是要顯示的數據集,"DisplayMember"是ComboBox組件顯示的字段,"ValueMember"是實際使用值。具體如下:
ComboBox1.DataSource = myDataSet ;
ComboBox1.DisplayMember = "person.xm" ;
ComboBox1.ValueMember = "person.xm" ;
注釋:此時綁定是Access 2000數據庫中"person"表的"xm"字段。由此可以得到ComboBox組件數據綁定的源程序代碼(Combo01.cs),本代碼操作數據庫是Access 2000:
public class Form1 : Form
{
private ComboBox ComboBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
file://創建一個 OleDbConnection
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
myConn.Open ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , "person" ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
ComboBox1.DataSource = myDataSet ;
ComboBox1.DisplayMember = "person.xm" ;
ComboBox1.ValueMember = "person.xm" ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
得到了ComboBox組件對本地數據庫的數據綁定程序,也就十分方便的得到ComboBox組件綁定Sql Server 2000源程序代碼(Combox02.cs)具體如下:
public class Form1 : Form
{
private ComboBox ComboBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
// 設定數據連接字符串,此字符串的意思是打開Sql server數據庫,服務器名稱為server1,數據庫為data1
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , " person " ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
ComboBox1.DataSource = myDataSet ;
ComboBox1.DisplayMember = "person.xm" ;
ComboBox1.ValueMember = "person.xm" ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}}
(2).ListBox組件的數據綁定:
ListBox組件的數據綁定和ComboBox組件的數據綁定的方法大致相同,也是通過設定"DisplayMember"、"ValueMember"。其中"DataSource"這三個屬性來完成的。並且這三個屬性在ListBox組件中代表的意思和ComboBox組件的意思基本一樣。由此可以得到ListBox組件對本地數據庫和遠程數據庫進行數據綁定的源程序。其中ListBox01.cs是對本地數據庫進行數據綁定,ListBox02.cs是對遠程數據庫進行數據綁定,具體如下:
ListBox01.cs源程序代碼節選:
public class Form1 : Form
{
private ListBox ListBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
file://創建一個 OleDbConnection
string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
myConn.Open ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , "person" ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
ListBox1.DataSource = myDataSet ;
ListBox1.DisplayMember = "person.xm" ;
ListBox1.ValueMember = "person.xm" ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
}
以下代碼是ListBox組件對Sql Server 2000數據庫進行數據綁定的源程序節選(ListBox02.cs):
{
private ListBox ListBox1 ;
private Button button1 ;
private System.Data.DataSet myDataSet ;
private System.ComponentModel.Container components = null ;
public Form1 ( )
{
file://打開數據鏈接,得到數據集
GetConnect ( ) ;
InitializeComponent ( ) ;
}
file://清除程序中使用過的資源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void GetConnect ( )
{
// 設定數據連接字符串,此字符串的意思是打開Sql server數據庫,服務器名稱為server1,數據庫為data1
string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;
OleDbConnection myConn = new OleDbConnection ( strCon ) ;
myConn.Open ( ) ;
string strCom = " SELECT * FROM person " ;
file://創建一個 DataSet
myDataSet = new DataSet ( ) ;
file://用 OleDbDataAdapter 得到一個數據集
OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;
file://把Dataset綁定person數據表
myCommand.Fill ( myDataSet , " person " ) ;
file://關閉此OleDbConnection
myConn.Close ( ) ;
}
private void button1_Click ( object sender , System.EventArgs e )
{
ListBox1.DataSource = myDataSet ;
ListBox1.DisplayMember = "person.xm" ;
ListBox1.ValueMember = "person.xm" ;
}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}}
六. 總結
本文介紹的實現數據綁定組件的都是在程序設計中經常用到的WinForm組件。當然在.Net FrameWork SDK中提供的WinForm組件是很多的,由於本文的限制,不可能一一介紹,一般來說,WinForm組件都可以實現數據綁定,雖然在某些具體的方法上有所差異,但也總是大同小異。在以下的文章中,將以此為基礎探討Visual C#中數據庫編程。