日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Silverlight中連接MySQL數(shù)據(jù)庫實例詳解

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

創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計、做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。

#T#

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

我們要實現(xiàn), 用戶輸入用戶名和密碼后,點(diǎn)擊登錄按鈕,傳遞用戶名和密碼到服務(wù)器端, 通過WCF訪問MSSQL數(shù)據(jù)庫,調(diào)用存儲過程,在服務(wù)器端對用戶名和密碼進(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ù)庫中建立一個新表 Users,包含以下字段;

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

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

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

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

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

 
 
 
  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項目,

1. 建立一個新項目"SilverlightDBDemo",

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

3. 在Web項目中添加新選項

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

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

代碼如下:

 
 
 
  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.     }

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

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

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

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

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

后文我將講述如何修改。

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

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.         // Add more operations here and mark them with [OperationContract]
  22.     }
  23. }

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

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

 
 
 
  1.   
  2.     
  3. Initial Catalog=SilverlightDemo;
  4. User Id=dev;Password=dev;"/>
  5.    

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

 
 
 
  1.    
  2.     
  3.      
  4.       
  5.       
  6.      
  7.     
  8.    
  9.   
  10.    
  11.     
  12.      
  13.      
  14.     
  15.    
  16.   
  17.   
  18.   
  19.    
  20.     name="SilverlightDBDemo.Web.DBService">
  21.     
  22.      contract="SilverlightDBDemo.Web.DBService" />
  23.     
  24.    
  25.   

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

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

 
 
 
  1.  
  2.    
  3.      
  4.          maxBufferPoolSize="2147483647"
  5.         maxReceivedMessageSize="2147483647"
  6.          maxBufferSize="2147483647">
  7.        
  8.            maxArrayLength="2147483647"
  9.            maxBytesPerRead="2147483647"
  10.           maxDepth="2147483647"
  11.           maxNameTableCharCount="2147483647"
  12.           maxStringContentLength="2147483647" />
  13.     
  14.   

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

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

 
 
 
  1.      contract="SilverlightDBDemo.Web.DBService" />

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

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

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

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

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

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

17. 在生成DBService服務(wù)引用后,VS2008會自動生成一個ServiceReferences.ClientConfig文件。

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

  
 
 
  1.      
  2.          
  3.              
  4.                  
  5.                      maxReceivedMessageSize="2147483647">
  6.                      
  7.                          
  8.                              
  9.                         
  10.                     
  11.                 
  12.             
  13.         
  14.         
  15.             
  16.                 binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_DBService"
  17.                 contract="DBService.DBService" name="BasicHttpBinding_DBService" />
  18.         
  19.     

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

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

  
 
 
  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.         private void client_GetUserCompleted(object sender, GetUserCompletedEventArgs e)
  9.        {
  10.            try
  11.            {
  12.                if (e.Result)
  13.                {
  14.                    tbMessage.Text = "登錄成功!";
  15.                }
  16.                else
  17.                {
  18.                    tbMessage.Text = "登錄失敗!";
  19.                }
  20.            }
  21.            catch (Exception error)
  22.            {
  23.                tbMessage.Text = error.ToString();
  24.            }
  25.        }
  26.        private void btLogin_Click(object sender, RoutedEventArgs e)
  27.        {
  28.            GetUser();
  29.        }

登錄成功如下圖:

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

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


新聞標(biāo)題:Silverlight中連接MySQL數(shù)據(jù)庫實例詳解
文章URL:http://m.5511xx.com/article/djhosoj.html