成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Silverlight中連接MySQL數據庫實例詳解

開發 后端
在這里我們將討論的是Silverlight中連接MySQL數據庫實例,希望對大家做好WEB開發有所幫助。

本文將重點講述Silverlight中連接MySQL數據庫實例,這在RIA開發中比較基礎,但是也是比較重要的內容。希望通過本文能讓大家對連接MySQL有更深刻的理解。

#T#

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

我們要實現, 用戶輸入用戶名和密碼后,點擊登錄按鈕,傳遞用戶名和密碼到服務器端, 通過WCF訪問MSSQL數據庫,調用存儲過程,在服務器端對用戶名和密碼進行匹配,匹配成功,則返回登錄成功,否則,則是失敗。

在文章開始前,我們需要做一下準備工作,

開發環境需求: VS2008 SP1, Silverlight 3 Develop Tools for VS2008 SP1, 客戶端Silverlight 3 Runtime, MSSQL 2005 SP3 ;

建立例程數據庫 SilverlightDemo,在數據庫中建立一個新表 Users,包含以下字段;

 建立新表

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

 字碼段加密

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

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

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

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

  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 

 在完成上面的準備工作后,開始建立新的Silverlight項目,

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

新項目

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

登陸界面

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

Web項目

4. 添加一個簡單的用戶信息類Users,作為WCF的契約成員,當我們從數據庫中讀取信息后,將賦值給該類的契約成員,方便客戶端進行調用;

WCF成員

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

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. 建立構造函數 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",修改服務名字為 DBService.svc,需要注意的是,WCF service對于Silverlight僅支持BasicHttpBinding,而VS2008自動生成是customBinding,很多朋友說使用了"Silverlight-enabled WCF Service",鏈接數據庫仍舊失敗,無法找到遠程服務器,是因為沒有使用BasicHttpBinding進行通訊,造成的失敗。

后文我將講述如何修改。

[[7946]]

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

WEB服務器上顯示

9. 雙擊進入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命名空間,所以保持默認為空,AspNet的兼容需求模式我們保持默認。在正式項目中,我們習慣將所有的[OperationContract]函數放入一個接口文件中,這樣方便擴展以及維護,在本例,為了方便大家理解,就不把[OperationContract]放入接口文件。 在VS2008自動生成代碼下面直接添加數據庫訪問代碼。

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

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

11. 前文已經說過,Silverlight僅支持使用BasicHttpBinding通過WCF service進行通訊,而VS2008自動生成的代碼是customBinding,所以,我們也需要在Web.Config中進行修改.下面是VS2008自動生成的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> 

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

首先刪除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之類的屬性可以刪除,但是如果讀取數據庫中的大型表格,就需要設置緩沖池之類的尺寸了。這里,我們已經使用了basicHttpBinding. Binding name我使用了BasicHttpBinding_DBService,大家可以隨意更換,下面將用到。

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

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

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

  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客戶端,點擊右鍵添加服務引用

客戶端

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

彈出窗口

15. 點擊"Advanced.."高級按鈕,確認選中"Reuse types in referenced assembiles",如下圖,

高級按鈕

16. 然后,點擊確定,會在客戶端中生成DBService服務引用。

 客戶端生成 

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

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

  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. 下面我們將在客戶端調用該服務引用,獲取數據庫的返回值,根據返回值,我們將簡單判斷登錄是否成功。

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

  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]]

到這里為止,我想你已經學會了如何使用WCF存取MSSQL數據庫了

原文標題:圖文詳解Silverlight訪問MSSQL數據庫

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

責任編輯:彭凡 來源: 博客園
相關推薦

2009-09-07 15:25:24

MySQL數據庫互操作Silverlight

2011-07-26 18:11:56

iPhone Sqlite 數據庫

2011-07-05 10:16:16

Qt 數據庫 SQLite

2011-07-05 10:03:00

Qt MYSQL 數據庫

2010-04-01 09:45:38

NoSQL

2011-05-19 13:25:14

Oracle數據庫

2011-06-21 15:11:04

QT 數據庫

2010-11-29 11:47:26

連接Sybase數據庫

2019-09-27 08:55:14

數據庫MySQL服務器

2010-06-01 14:42:55

連接MySQL數據庫

2011-03-29 10:47:49

ORACLE數據庫

2018-07-30 15:00:05

數據庫MySQLJOIN

2009-06-01 09:57:43

netbeans連接數netbeans數據庫netbeans連接m

2020-09-22 15:56:31

Java

2011-05-26 13:42:50

MFC連接MySql數據庫

2024-04-03 00:06:03

2011-07-05 09:35:52

Ubuntu Qt Mysql

2010-03-10 11:29:47

MySQL數據庫性能調

2011-07-05 09:54:04

2011-08-11 16:55:34

Oracle數據庫AWR
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人18亚洲xxoo | 中文字幕在线网 | 日韩在线观看 | 国产精品区一区二区三 | 久久国产一区二区三区 | 日韩免费福利视频 | 久久久久久一区 | 久久i| 99精品久久久国产一区二区三 | 日本黄色激情视频 | 欧美1区2区 | 久久国产成人 | 久久午夜精品福利一区二区 | 欧美一区二区大片 | 国产成人精品一区二区三区 | 午夜影院操| 欧美激情精品久久久久久免费 | 亚洲电影一区二区三区 | 欧美成人免费在线视频 | 欧美日韩一区二区三区四区五区 | 中文字幕视频在线看5 | 最新中文字幕久久 | 91久久国产综合久久 | 日韩中文字幕在线播放 | 日韩精品免费视频 | 99精品久久 | 国产精品久久久久久久久久久久久 | 日韩一区二区在线视频 | 久久国产成人午夜av影院武则天 | 国产精品综合一区二区 | 一区二区三区国产 | 黄在线| 免费成人在线网 | 欧美精品在欧美一区二区 | 国产精品久久久久久福利一牛影视 | 91豆花视频 | 人人鲁人人莫人人爱精品 | 国产精品一级 | 久久99精品视频 | 久久综合99 | 国产精品日韩一区二区 |