自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Silverlight中連接MySQL數(shù)據(jù)庫實(shí)例詳解

開發(fā) 后端
在這里我們將討論的是Silverlight中連接MySQL數(shù)據(jù)庫實(shí)例,希望對(duì)大家做好WEB開發(fā)有所幫助。

本文將重點(diǎn)講述Silverlight中連接MySQL數(shù)據(jù)庫實(shí)例,這在RIA開發(fā)中比較基礎(chǔ),但是也是比較重要的內(nèi)容。希望通過本文能讓大家對(duì)連接MySQL有更深刻的理解。

#T#

在銀光中國網(wǎng)(SilverlightChina.Net)有一篇"Silverlight與常用數(shù)據(jù)庫互操作系列"文章,其中介紹了使用Silverlight存取不同數(shù)據(jù)庫的方法和步驟。但是對(duì)于Silverlight存取MS SQL介紹的不夠全面,這里我想介紹Silverlight如何通過WCF訪問MSSQL數(shù)據(jù)庫存儲(chǔ)過程的。希望對(duì)大家能夠有所幫助。

我們要實(shí)現(xiàn), 用戶輸入用戶名和密碼后,點(diǎn)擊登錄按鈕,傳遞用戶名和密碼到服務(wù)器端, 通過WCF訪問MSSQL數(shù)據(jù)庫,調(diào)用存儲(chǔ)過程,在服務(wù)器端對(duì)用戶名和密碼進(jìn)行匹配,匹配成功,則返回登錄成功,否則,則是失敗。

在文章開始前,我們需要做一下準(zhǔn)備工作,

開發(fā)環(huán)境需求: VS2008 SP1, Silverlight 3 Develop Tools for VS2008 SP1, 客戶端Silverlight 3 Runtime, MSSQL 2005 SP3 ;

建立例程數(shù)據(jù)庫 SilverlightDemo,在數(shù)據(jù)庫中建立一個(gè)新表 Users,包含以下字段;

 建立新表

添加內(nèi)容到Users表,為了方便起見,密碼全部使用明文,在正式項(xiàng)目中,建議對(duì)密碼字段進(jìn)行加密使用。

 字碼段加密

這里,我們驗(yàn)證用戶名和密碼,有兩種簡單方式,

一是使用存儲(chǔ)過程讀取用戶名和密碼,然后在服務(wù)器端進(jìn)行用戶名和密碼匹配校驗(yàn),如果查找到匹配數(shù)據(jù),則返回登錄成功,否則,則是登錄失敗;

二是傳用戶名和密碼到存儲(chǔ)過程中,在數(shù)據(jù)庫存儲(chǔ)過程中進(jìn)行判斷,使用Select語句進(jìn)行查找,對(duì)應(yīng)用戶名和密碼,如果查找到匹配結(jié)果,則返回用戶ID, 服務(wù)器端接收到用戶ID,則返回登錄成功,否則,則是失??;

在本例中,主要是對(duì)Silverlight訪問數(shù)據(jù)庫進(jìn)行講述,所以,對(duì)于驗(yàn)證方法,不進(jìn)行詳細(xì)描述和講解,如果有問題,可以留言給我,我們繼續(xù)討論,這里,我將使用第一種驗(yàn)證方法。 為此,建立一個(gè)簡單的存儲(chǔ)過程:

  1. CREATE PROCEDURE [dbo].[Login]  
  2. ( @UserName Varchar(30))  
  3.  AS       
  4.         Select cUserName, cPassword  
  5.         From Users  
  6.         Where cUserName = @UserName   
  7.      RETURN   
  8. SET NOCOUNT ON 

 在完成上面的準(zhǔn)備工作后,開始建立新的Silverlight項(xiàng)目,

1. 建立一個(gè)新項(xiàng)目"SilverlightDBDemo",

新項(xiàng)目

2. 在MainPage中建立簡單的登錄界面,如下:

登陸界面

3. 在Web項(xiàng)目中添加新選項(xiàng)

Web項(xiàng)目

4. 添加一個(gè)簡單的用戶信息類Users,作為WCF的契約成員,當(dāng)我們從數(shù)據(jù)庫中讀取信息后,將賦值給該類的契約成員,方便客戶端進(jìn)行調(diào)用;

WCF成員

VS2008將自動(dòng)生成Users類代碼,在類命名前添加數(shù)據(jù)契約屬性[DataContract()]。 為了能夠使綁定數(shù)據(jù)返回修改通知,這里需要繼承INotifyPropertyChanged接口,該步驟不添加對(duì)本教程也沒有影響,為了以后例程代碼完整性,這里我繼承了該接口。在接口上點(diǎn)擊右鍵,生成代碼。

Users類代碼

代碼如下:

  1. namespace SilverlightDBDemo.Web  
  2.  {  
  3.      [DataContract()]  
  4.      public class Users : INotifyPropertyChanged  
  5.      {  
  6.    
  7.          #region INotifyPropertyChanged Members  
  8.    
  9.          public event PropertyChangedEventHandler PropertyChanged;   
  10.         #endregion  
  11.     }  
  12. }  

5. 在Users類中,添加契約成員

  1. private string userName;  
  2. [DataMember()]  
  3.  public string UserName  
  4.  {  
  5.      get { return userName; }  
  6.      set { userName = value;}  
  7.  }  
  8.  
  9.  private string password;  
  10. [DataMember()]  
  11. public string Password  
  12. {  
  13.     get { return password;  }  
  14.     set { password = value; }  

6. 建立構(gòu)造函數(shù) public Users(string sUserName,string sPassword),傳遞用戶名和密碼給契約成員;

  1. using System;  
  2. using System.ComponentModel;  
  3. using System.Runtime.Serialization;  
  4.  
  5. namespace SilverlightDBDemo.Web  
  6. {  
  7.     [DataContract()]  
  8.     public class Users : INotifyPropertyChanged  
  9.     {  
  10.        private string userName;  
  11.        [DataMember()]  
  12.        public string UserName  
  13.        {  
  14.            get { return userName; }  
  15.            set { userName = value;}  
  16.        }  
  17.  
  18.        private string password;  
  19.        [DataMember()]  
  20.        public string Password  
  21.        {  
  22.            get { return password;  }  
  23.            set { password = value; }  
  24.        }  
  25.  
  26.        public Users(string sUserName,string sPassword)  
  27.        {  
  28.            UserName = sUserName;  
  29.            Password = sPassword;  
  30.        }  
  31.  
  32.        #region INotifyPropertyChanged Members  
  33.  
  34.        public event PropertyChangedEventHandler PropertyChanged;  
  35.  
  36.        #endregion  
  37.    }  

7. 添加"Silverlight-enabled WCF Service",修改服務(wù)名字為 DBService.svc,需要注意的是,WCF service對(duì)于Silverlight僅支持BasicHttpBinding,而VS2008自動(dòng)生成是customBinding,很多朋友說使用了"Silverlight-enabled WCF Service",鏈接數(shù)據(jù)庫仍舊失敗,無法找到遠(yuǎn)程服務(wù)器,是因?yàn)闆]有使用BasicHttpBinding進(jìn)行通訊,造成的失敗。

后文我將講述如何修改。

[[7946]]

8. 添加后,在Web服務(wù)器端會(huì)有DBService.svc和DBService.svc.cs文件出現(xiàn),VS2008將自動(dòng)更新Web項(xiàng)目的類庫引用;

WEB服務(wù)器上顯示

9. 雙擊進(jìn)入DBService.svc.cs文件,可以看到以下代碼:

  1. using System;  
  2.  using System.Linq;  
  3.  using System.Runtime.Serialization;  
  4.  using System.ServiceModel;  
  5.  using System.ServiceModel.Activation;  
  6.  using System.Collections.Generic;  
  7.  using System.Text;  
  8.    
  9.  namespace SilverlightDBDemo.Web  
  10. {  
  11.     [ServiceContract(Namespace = "")]  
  12.     [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]  
  13.     public class DBService  
  14.     {  
  15.         [OperationContract]  
  16.         public void DoWork()  
  17.         {  
  18.             // Add your operation implementation here  
  19.            return;  
  20.         }  
  21.  
  22.         // Add more operations here and mark them with [OperationContract]  
  23.     }  

這里我們沒有修改ServiceContract命名空間,所以保持默認(rèn)為空,AspNet的兼容需求模式我們保持默認(rèn)。在正式項(xiàng)目中,我們習(xí)慣將所有的[OperationContract]函數(shù)放入一個(gè)接口文件中,這樣方便擴(kuò)展以及維護(hù),在本例,為了方便大家理解,就不把[OperationContract]放入接口文件。 在VS2008自動(dòng)生成代碼下面直接添加數(shù)據(jù)庫訪問代碼。

10. 在添加服務(wù)器端數(shù)據(jù)庫訪問代碼前,需要修改Web.Config文件。和Asp.Net項(xiàng)目一樣,在鏈接數(shù)據(jù)庫前,我們首先需要在Web.Config中配置數(shù)據(jù)庫連接字符串,請(qǐng)自行替換數(shù)據(jù)庫登錄ID和密碼

  1.   <appSettings> 
  2.     <add key="DbServiceConnectionString" value="Data Source=(Local);  
  3. Initial Catalog=SilverlightDemo;  
  4. User Id=dev;Password=dev;"/> 
  5.    </appSettings> 

11. 前文已經(jīng)說過,Silverlight僅支持使用BasicHttpBinding通過WCF service進(jìn)行通訊,而VS2008自動(dòng)生成的代碼是customBinding,所以,我們也需要在Web.Config中進(jìn)行修改.下面是VS2008自動(dòng)生成的Web.Config部分代碼,劃線部分是下面要修改的部分。

  1. <system.serviceModel> 
  2.    <behaviors> 
  3.     <serviceBehaviors> 
  4.      <behavior name="SilverlightDBDemo.Web.DBServiceBehavior"> 
  5.       <serviceMetadata httpGetEnabled="true" /> 
  6.       <serviceDebug includeExceptionDetailInFaults="False" /> 
  7.      </behavior> 
  8.     </serviceBehaviors> 
  9.    </behaviors> 
  10.   <bindings> 
  11.    <customBinding> 
  12.     <binding name="customBinding0"> 
  13.      <binaryMessageEncoding /> 
  14.      <httpTransport /> 
  15.     </binding> 
  16.    </customBinding> 
  17.   </bindings> 
  18.   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
  19.   <services> 
  20.    <service behaviorConfiguration="SilverlightDBDemo.Web.DBServiceBehavior" 
  21.     name="SilverlightDBDemo.Web.DBService"> 
  22.     <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0" 
  23.      contract="SilverlightDBDemo.Web.DBService" /> 
  24.     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
  25.    </service> 
  26.   </services> 
  27. </system.serviceModel> 

-->這里我們需要修改以下幾個(gè)地方:

首先刪除customBinding,從上面代碼,第10行,到17行,使用下面代碼替換:

  1.  <bindings> 
  2.    <basicHttpBinding> 
  3.      <binding name="BasicHttpBinding_IDataService" 
  4.          maxBufferPoolSize="2147483647" 
  5.         maxReceivedMessageSize="2147483647" 
  6.          maxBufferSize="2147483647"> 
  7.        <readerQuotas 
  8.            maxArrayLength="2147483647" 
  9.            maxBytesPerRead="2147483647" 
  10.           maxDepth="2147483647" 
  11.           maxNameTableCharCount="2147483647" 
  12.           maxStringContentLength="2147483647" /> 
  13.     </binding> 
  14.   </basicHttpBinding> 
  15. </bindings> 

其中那些2147483647之類的屬性可以刪除,但是如果讀取數(shù)據(jù)庫中的大型表格,就需要設(shè)置緩沖池之類的尺寸了。這里,我們已經(jīng)使用了basicHttpBinding. Binding name我使用了BasicHttpBinding_DBService,大家可以隨意更換,下面將用到。

然后修改22行和23行的代碼,將endpoint中的binding,內(nèi)容修改為basicHttpBinding,bindingConfiguration的內(nèi)容修改為BasicHttpBinding_DBService。

  1. <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DBService" 
  2.      contract="SilverlightDBDemo.Web.DBService" /> 

12. 現(xiàn)在我們可以在DBService.svc.cs中添加存取數(shù)據(jù)庫代碼,對(duì)用戶名和密碼進(jìn)行簡單匹配,這里不再著重講述如何條件匹配登錄信息。這里演示了如何調(diào)用數(shù)據(jù)庫存儲(chǔ)過程。完成存取數(shù)據(jù)庫代碼后,成功編譯Web項(xiàng)目。代碼有點(diǎn)長,這里折疊起來。

  1. private string connectionString = WebConfigurationManager.AppSettings["DbServiceConnectionString"];  
  2.  
  3.         [OperationContract]  
  4.         public bool GetUser(string cUserName, string cPassword)  
  5.         {  
  6.             SqlConnection conn = new SqlConnection(connectionString);  
  7.             SqlCommand cmd = new SqlCommand("Login", conn);  
  8.             cmd.CommandType = CommandType.StoredProcedure;  
  9.             cmd.Parameters.AddWithValue("@UserName", cUserName);  
  10.  
  11.            try 
  12.            {  
  13.                conn.Open();  
  14.                SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SingleRow);  
  15.                if (reader.Read())  
  16.                {  
  17.                    Users user = new Users((string)reader["cUserName"],  
  18.                        (string)reader["cPassword"]);  
  19.                    if (user.Password == cPassword)  
  20.                    {  
  21.                        return true;  
  22.                    }  
  23.                    else 
  24.                    {  
  25.                        return false;  
  26.                    }  
  27.                }  
  28.                else 
  29.                {  
  30.                    return false;  
  31.                }  
  32.            }  
  33.            finally 
  34.            {  
  35.                conn.Close();  
  36.            }  
  37.        } 

13. 在SilverlightDBDemo客戶端,點(diǎn)擊右鍵添加服務(wù)引用

客戶端

14. 在彈出窗口中,點(diǎn)擊"Discover",查找本地WCF service。在地址欄會(huì)自動(dòng)搜索到本地的Service引用,在Services樹形框中我們可以看到,在服務(wù)器端建立的DBService.svc,雙擊打開,可以看到,我們建立的GetUser函數(shù),以及默認(rèn)的DoWork函數(shù)。修改下面的命名空間為"DBService",方便調(diào)用。

彈出窗口

15. 點(diǎn)擊"Advanced.."高級(jí)按鈕,確認(rèn)選中"Reuse types in referenced assembiles",如下圖,

高級(jí)按鈕

16. 然后,點(diǎn)擊確定,會(huì)在客戶端中生成DBService服務(wù)引用。

 客戶端生成 

17. 在生成DBService服務(wù)引用后,VS2008會(huì)自動(dòng)生成一個(gè)ServiceReferences.ClientConfig文件。

我們需要留意查看一下該文件內(nèi)容。其中,bindings信息是basicHttpBinding,而endpoint內(nèi)容和Web.Config中的內(nèi)容相同。這里我們不需要修改任何代碼。

  1. <configuration> 
  2.      <system.serviceModel> 
  3.          <bindings> 
  4.              <basicHttpBinding> 
  5.                  <binding name="BasicHttpBinding_DBService" maxBufferSize="2147483647" 
  6.                      maxReceivedMessageSize="2147483647"> 
  7.                      <security mode="None"> 
  8.                          <transport> 
  9.                              <extendedProtectionPolicy policyEnforcement="Never" /> 
  10.                         </transport> 
  11.                     </security> 
  12.                 </binding> 
  13.             </basicHttpBinding> 
  14.         </bindings> 
  15.         <client> 
  16.             <endpoint address="http://localhost/SilverlightDBDemo.Web/DBService.svc" 
  17.                 binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DBService" 
  18.                 contract="DBService.DBService" name="BasicHttpBinding_DBService" /> 
  19.         </client> 
  20.     </system.serviceModel> 
  21. </configuration> 

18. 下面我們將在客戶端調(diào)用該服務(wù)引用,獲取數(shù)據(jù)庫的返回值,根據(jù)返回值,我們將簡單判斷登錄是否成功。

進(jìn)入MainPage.xaml.cs中,建立GetUser方法。該代碼中EndpointAddress是最重要的,出現(xiàn)沒有發(fā)現(xiàn)遠(yuǎn)程服務(wù)器錯(cuò)誤,和這里設(shè)置也有關(guān)系。在client_GetUserCompleted中,e.Result代表了數(shù)據(jù)庫返回值??梢越邮苋魏沃?,大家可以根據(jù)需要進(jìn)行值類型轉(zhuǎn)換。每次,用戶點(diǎn)擊登陸按鈕,Silverlight客戶端都會(huì)向服務(wù)器端請(qǐng)求驗(yàn)證,返回結(jié)果會(huì)在提示信息欄顯示。

  1. private void GetUser()  
  2.         {  
  3.             EndpointAddress address = new EndpointAddress(new Uri(Application.Current.Host.Source, "/SilverlightDBDemo.Web/DBService.svc"));  
  4.             DBServiceClient client = new DBServiceClient(new BasicHttpBinding(), address);  
  5.             client.GetUserCompleted += client_GetUserCompleted;  
  6.             client.GetUserAsync(txtUsername.Text, pbPassword.Password);  
  7.         }  
  8.  
  9.         private void client_GetUserCompleted(object sender, GetUserCompletedEventArgs e)  
  10.        {  
  11.            try 
  12.            {  
  13.                if (e.Result)  
  14.                {  
  15.                    tbMessage.Text = "登錄成功!";  
  16.                }  
  17.                else 
  18.                {  
  19.                    tbMessage.Text = "登錄失敗!";  
  20.                }  
  21.            }  
  22.            catch (Exception error)  
  23.            {  
  24.                tbMessage.Text = error.ToString();  
  25.            }  
  26.        }  
  27.  
  28.        private void btLogin_Click(object sender, RoutedEventArgs e)  
  29.        {  
  30.            GetUser();  
  31.        } 
登錄成功如下圖:

[[7947]]

到這里為止,我想你已經(jīng)學(xué)會(huì)了如何使用WCF存取MSSQL數(shù)據(jù)庫了

原文標(biāo)題:圖文詳解Silverlight訪問MSSQL數(shù)據(jù)庫

鏈接:http://www.cnblogs.com/jv9/archive/2009/12/30/1635655.html

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-09-07 15:25:24

MySQL數(shù)據(jù)庫互操作Silverlight

2011-07-26 18:11:56

iPhone Sqlite 數(shù)據(jù)庫

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫 SQLite

2011-07-05 10:03:00

Qt MYSQL 數(shù)據(jù)庫

2011-05-19 13:25:14

Oracle數(shù)據(jù)庫

2010-04-01 09:45:38

NoSQL

2010-11-29 11:47:26

連接Sybase數(shù)據(jù)庫

2011-06-21 15:11:04

QT 數(shù)據(jù)庫

2019-09-27 08:55:14

數(shù)據(jù)庫MySQL服務(wù)器

2010-06-01 14:42:55

連接MySQL數(shù)據(jù)庫

2011-03-29 10:47:49

ORACLE數(shù)據(jù)庫

2018-07-30 15:00:05

數(shù)據(jù)庫MySQLJOIN

2011-07-05 09:35:52

Ubuntu Qt Mysql

2009-06-01 09:57:43

netbeans連接數(shù)netbeans數(shù)據(jù)庫netbeans連接m

2011-05-26 13:42:50

MFC連接MySql數(shù)據(jù)庫

2020-09-22 15:56:31

Java

2024-04-03 00:06:03

2010-03-10 11:29:47

MySQL數(shù)據(jù)庫性能調(diào)

2011-07-05 09:54:04

2009-07-29 09:12:31

ASP.NET數(shù)據(jù)庫連
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)