我們知道C#的Web Service API的傳回值可以是DataSet類型,這就使得我們可以通過Web Service API來查詢資料庫,這個功能將成為我們許多應用的基礎。下面我們用一個簡單的Winform調用的例子來說明這個問題。
首先我們有一個SQL Server2000資料庫book在伺服器webserviceserver上,book庫中有張表bookinfo,包含書名、作者、價格等欄位,資料庫使用者sa,密碼123456。我們利用VS2005建立一個Web Service項目並發布出去,這裡不再詳述如何建立和發布,如有不清楚的地方請參閱相關資料。也可以參考我的另兩篇文章:
http://blog.csdn.net/cattiger75/archive/2007/10/17/1828896.aspx(如何建立和發布WEB SERVICE)
http://blog.csdn.net/cattiger75/archive/2007/10/19/1832803.aspx(C#WINFORM裡如何調用WEB Service API)
我們在項目的Service.cs裡編寫一個查詢資料庫的API,為了簡化問題,我們編寫的這個API只接受一個字串參數,用來在書名欄位做前方匹配的查詢,返回一個DataSet,這個DataSet中包含一個名為bookinfo的DataTable,bookinfo中含有書名、作者和價格欄位,代碼如下: using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data .SqlClient;
[WebService(Namespace = http://www.mywebservice.com/ )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Service : System.Web.Services.WebService
{
// 定義一個sqlconnection串連成員
SqlConnection sqlconn = new SqlConnection( " Server=webserviceserver;Initial Catalog=book;uid=sa;pwd=123456 " );
public Service () {
// 如果使用設計的組件,請取消注釋以下行
// InitializeComponent();
}
[WebMethod]
public string HelloWorld() {
return " 歡迎使用我的WEB服務。 " ;
}
[WebMethod]
public DataSet searchBook( string bookname)
{
sqlconn.Open();
string sql = " select top 50 書名,作者,價格 from bookinfo where 書名 like ' " + bookname + " %' order by id desc " ;
SqlDataAdapter da = new SqlDataAdapter(sql, sqlconn);
DataSet ds = new DataSet();
da.Fill(ds, " bookinfo " );
return ds;
}
}
編寫好後將Web Service發布出去。
現在我們來建立一個winform的Windows應用程式項目,並在項目中將我們剛剛發布的WEB Service做為一個WEB引用添加進來。
在項目表單中建立一個textbox控制項用來輸入查詢內容,一個名為btnBookSearch的查詢button,一個DataGridView控制項用來綁定獲得的dataset。雙擊查詢button編寫如下事件處理函數。 private void btnBookSearch_Click( object sender, EventArgs e)
{
// 定義一個Web Service對象,WebReference是我們添加WEB引用時取的名稱
WebReference.Service ws = new cqust.libmanage.WebReference.Service();
this .dataGridViewBookInfo.AutoGenerateColumns = true ;
// 將返回的dataset綁定到datagridview上
this .dataGridViewBookInfo .DataSource = ws.searchBook( this .textBoxSearchString.Text);
// 指定顯示的datatable
this .dataGridViewBookInfo.DataMember = " bookinfo " ;
}
編譯項目並行,你將會在datagridview中看到查詢的結果。
我們的例子非常簡單,沒有考慮諸如異常捕獲、非同步呼叫、安全性等問題,但是它說明了利用Web Service API查詢資料庫是非常簡單的,通過對這個簡單API的擴充,你可以實現非常複雜的資料庫查詢。