幾步走,教你創(chuàng)建簡(jiǎn)單訪問(wèn)數(shù)據(jù)庫(kù)方法
本文將建立一個(gè)最簡(jiǎn)單的WCF RIA Services訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)例,附帶有數(shù)據(jù)庫(kù)文件,可以在SQL Server中附加數(shù)據(jù)庫(kù),在本文中并沒(méi)有采用ADO.NET實(shí)體數(shù)據(jù)模型綁定數(shù)據(jù)庫(kù),而是單獨(dú)寫(xiě)一個(gè)類來(lái)連接數(shù)據(jù)庫(kù)查詢數(shù)據(jù)表并返回值,下面我們看詳細(xì)步驟。
第一步:首先我們打開(kāi)VS2010,新建一個(gè)Silverlight應(yīng)用程序項(xiàng)目SLGetDataFromWCFRIA。
第二步:點(diǎn)擊確定之后,在彈出的“新建Silverlight應(yīng)用程序”窗口中,選中“啟用 WCF RIA 服務(wù)”復(fù)選框然后確定。
第三步:在創(chuàng)建好的項(xiàng)目中,鼠標(biāo)右鍵點(diǎn)擊“SLGetDataFromWCFRIA.Web”項(xiàng)目,然后“添加”-->“新建項(xiàng)”-->“WCF服務(wù)”,命名為SLWCFRIA.svc。
第四步:在上一步生成的ISLWCFRIA.cs文件中,我們可以定義相關(guān)的通信的契約,在本實(shí)例中我們定義一個(gè)string GetData()契約。
第五步:在SLWCFRIA.svc.cs文件中我們實(shí)現(xiàn)這個(gè)契約函數(shù),代碼如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.Serialization;
- using System.ServiceModel;
- using System.Text;
- using System.Data;
- using System.Data.SqlClient;
- namespace SLGetDataFromWCFRIA.Web{
- // 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼、svc 和配置文件中的類名“SLWCFRIA”。
- public class SLWCFRIA : ISLWCFRIA
- {
- public void DoWork()
- {
- }
- public string GetData()
- {
- DataSet ds= DB.Getdata("select * from userinfo");
- return ds.GetXml();
- }
- }
- }
#p#
第七步:我們?cè)赟QL SERVER2008中創(chuàng)建一個(gè)示例數(shù)據(jù)庫(kù)名為SLRiaTest。在這個(gè)數(shù)據(jù)庫(kù)里面新增一個(gè)UserInfo表,在里面添加字段如下:
第八步:編寫(xiě)一個(gè)類,來(lái)連接SLRiaTest數(shù)據(jù)庫(kù),獲取DataSet數(shù)據(jù)集。
- DB.cs數(shù)據(jù)庫(kù)訪問(wèn)類
- /// <summary>
- /// DB 的摘要說(shuō)明
- /// </summary>
- public class DB
- {
- private static IsolationLevel m_isoLevel = IsolationLevel.ReadUncommitted;
- private static string connStr = string.Empty;
- private DB()
- {
- }
- #region DB2 Access Functions
- static public IsolationLevel IsolationLevel
- {
- get
- {
- return m_isoLevel;
- }
- }
- /// <summary>
- /// Gets Connection out of Web.config
- /// </summary>
- /// <returns>Returns SqlConnection</returns>
- public static SqlConnection GetConnection()
- {
- if (connStr == string.Empty)
- {
- AppSettingsReader configurationAppSettings = new AppSettingsReader();
- connStr = "Data Source=CXL-DC6F5F6CA80;
- POOLING=FALSE;database=SLRiaTest;
- User ID=sa;Password=123456";
- }
- SqlConnection conn = new SqlConnection(connStr);
- conn.Open();
- return conn;
- }
- /// <summary>
- /// Gets data out of database using a plain text string command
- /// </summary>
- /// <param name="sql">string command to be executed</param>
- /// <returns>DataTable with results</returns>
- static public DataSet Getdata(string sql)
- {
- using (SqlConnection conn = GetConnection())
- {
- using (SqlTransaction trans = conn.BeginTransaction(m_isoLevel))
- {
- try
- {
- using (SqlCommand cmd = conn.CreateCommand())
- {
- if (sql != null)
- {
- sqlsql = sql.ToLower().Replace("<;", "");
- //.Replace(Convert.ToChar(32).ToString(), " ").Replace(" ", " ").Replace("%32", " ").Replace("%20", " ");
- sqlsql = sql.Replace(">;", "");
- sqlsql = sql.Replace("script", "");
- sqlsql = sql.Replace("object", "");
- sqlsql = sql.Replace("applet", "");
- sqlsql = sql.Replace("[", "");
- sqlsql = sql.Replace("]", "");
- sqlsql = sql.Replace("execute", "");
- sqlsql = sql.Replace("exec", "");
- sqlsql = sql.Replace("union", "");
- sqlsql = sql.Replace("drop", "");
- sqlsql = sql.Replace("delete", "");
- // sqlsql = sql.Replace("chr", "");
- //sqlsql = sql.Replace("mid", "");
- sqlsql = sql.Replace("truncate", "");
- sqlsql = sql.Replace("nchar", "");
- // sqlsql = sql.Replace("varchar", "");
- //sqlsql = sql.Replace("char", "");
- sqlsql = sql.Replace("alter", "");
- // sqlsql = sql.Replace("cast", "");
- sqlsql = sql.Replace("exists", "");
- sqlsql = sql.Replace("update", "");
- }
- cmd.Transaction = trans;
- cmd.CommandType = CommandType.Text;
- cmd.CommandText = sql;
- using (DataSet ds = new DataSet())
- {
- using (SqlDataAdapter da = new SqlDataAdapter())
- {
- da.SelectCommand = cmd;
- da.SelectCommand.Connection = conn;
- da.Fill(ds);
- return ds;
- }
- }
- }
- }
- finally
- {
- trans.Commit();
- }
- }
- }
- }
- #endregion
- }
第九步:鼠標(biāo)右鍵點(diǎn)擊SLGetDataFromWCFRIA項(xiàng)目“添加服務(wù)引用”即引用剛才我們編寫(xiě)的WCF服務(wù)。
第十步:添加一個(gè)UserInfo的實(shí)體類集合。代碼如下:
- /// <summary>
- /// 用戶實(shí)體類
- /// </summary>
- public class UserInfo
- {
- private string _ID;
- private string _UserName;
- private string _UserAddr;
- private string _UserTel;
- public string ID
- {
- get { return _ID; }
- set { _ID = value; }
- }
- public string UserName
- {
- get { return _UserName; }
- set { _UserName = value; }
- }
- public string UserAddr
- {
- get { return _UserAddr; }
- set { _UserAddr = value; }
- }
- public string UserTel
- {
- get { return _UserTel; }
- set { _UserTel = value; }
- }
- }
第十一步:點(diǎn)擊MainPage.xaml文件,添加一個(gè)DataGird控件命名為grShow,在MainPage.xaml.cs文件中編寫(xiě)以下代碼獲取WCF RIA services讀取到的數(shù)據(jù)庫(kù)數(shù)據(jù):
- public partial class MainPage : UserControl
- {
- public MainPage()
- {
- InitializeComponent();
- //創(chuàng)建一個(gè)代理類的實(shí)例
- SLWCFRIAClient client = new SLWCFRIAClient();
- //調(diào)用GetData方法并加載事件
- client.GetDataAsync();
- client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
- }
- public List<UserInfo> userList = new List<UserInfo>();
- void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
- {
- using (XmlReader xReader = XmlReader.Create(new StringReader(e.Result)))
- {
- //XmlReader讀取XML數(shù)據(jù)
- while (xReader.ReadToFollowing("Table"))
- {
- xReader.ReadToDescendant("ID");
- string id = xReader.ReadElementContentAsString();
- xReader.ReadToNextSibling("UserName");
- string username = xReader.ReadElementContentAsString();
- xReader.ReadToNextSibling("UserAddr");
- string useraddr = xReader.ReadElementContentAsString();
- xReader.ReadToNextSibling("UserTel");
- string usertel = xReader.ReadElementContentAsString();
- //實(shí)例化類并添加進(jìn)實(shí)體類List<>
- UserInfo uinfo = new UserInfo(){ID=id, UserName=username,UserAddr=useraddr,UserTel=usertel};
- userList.Add(uinfo);
- }
- this.grShow.ItemsSource = userList;
- }
- }
- }
最后我們看最后的效果圖,本實(shí)例采用VS2010+Silverlight 4.0+MS SQL SERVER 2008,復(fù)制下述網(wǎng)址 (http://files.cnblogs.com/chengxingliang/SLGetDataFromWCFRIA.rar)即可下載本實(shí)例源碼和示例數(shù)據(jù)庫(kù)
原文鏈接:http://www.cnblogs.com/chengxingliang/archive/2011/03/28/1996434.html
【編輯推薦】