溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Silverlight與Access互操作的實現(xiàn)方法

發(fā)布時間:2021-06-16 15:11:28 來源:億速云 閱讀:146 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“Silverlight與Access互操作的實現(xiàn)方法”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

Silverlight與Access互操作是一個很基礎(chǔ)的問題,主要涉及到數(shù)據(jù)庫的操作。Access屬于輕量級的數(shù)據(jù)庫,應用起來還是比較方便的。

在開發(fā)一些小型應用程序時,我們就需要使用一些小巧的輕量級的數(shù)據(jù)庫,比如Access數(shù)據(jù)庫。由于Visual Studio中并沒有直接提供Silverlight與Access互操作的系列方法。于是本文就將為大家介紹如何讓Silverlight使用Access作為后臺數(shù)據(jù)庫。

準備工作

1)建立起測試項目

細節(jié)詳情請見強大的DataGrid組件[2]_數(shù)據(jù)交互之ADO.NET Entity Framework——Silverlight學習筆記[10]。

2)創(chuàng)建測試用數(shù)據(jù)庫

如下圖所示,創(chuàng)建一個名為Employees.mdb的Access數(shù)據(jù)庫,建立數(shù)據(jù)表名稱為Employee。將該數(shù)據(jù)庫置于作為服務(wù)端的項目文件夾下的App_Data文件夾中,便于操作管理。

Silverlight與Access互操作的實現(xiàn)方法

建立數(shù)據(jù)模型

EmployeeModel.cs文件(放置在服務(wù)端項目文件夾下)

using System;  using System.Collections.Generic;  using System.Linq;  namespace datagridnaccessdb  {      public class EmployeeModel      {          public int EmployeeID { get; set; }          public string EmployeeName { get; set; }          public int EmployeeAge { get; set; }      }  }

建立服務(wù)端Web Service★

右擊服務(wù)端項目文件夾,選擇Add->New Item....,按下圖所示建立一個名為EmployeesInfoWebService.asmx的Web Service,作為Silverlight與Access數(shù)據(jù)庫互操作的橋梁。

Silverlight與Access互操作的實現(xiàn)方法

創(chuàng)建完畢后,雙擊EmployeesInfoWebService.asmx打開該文件。將里面的內(nèi)容修改如下:

using System;  using System.Collections.Generic;  using System.Linq;  using System.Web;  using System.Web.Services;  using System.Data.OleDb;//引入該命名空間為了操作Access數(shù)據(jù)庫  using System.Data;  namespace datagridnaccessdb  {      /// <summary>     /// Summary description for EmployeesInfoWebService      /// </summary>     [WebService(Namespace = "http://tempuri.org/")]      [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]      [System.ComponentModel.ToolboxItem(false)]      // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.       // [System.Web.Script.Services.ScriptService]      public class EmployeesInfoWebService : System.Web.Services.WebService      {          [WebMethod]//獲取雇員信息          public List<EmployeeModel> GetEmployeesInfo()          {              List<EmployeeModel> returnedValue = new List<EmployeeModel>();              OleDbCommand Cmd = new OleDbCommand();              SQLExcute("SELECT * FROM Employee", Cmd);              OleDbDataAdapter EmployeeAdapter = new OleDbDataAdapter();              EmployeeAdapter.SelectCommand = Cmd;              DataSet EmployeeDataSet = new DataSet();              EmployeeAdapter.Fill(EmployeeDataSet);              foreach (DataRow dr in EmployeeDataSet.Tables[0].Rows)              {                  EmployeeModel tmp = new EmployeeModel();                  tmp.EmployeeID = Convert.ToInt32(dr[0]);                  tmp.EmployeeName = Convert.ToString(dr[1]);                  tmp.EmployeeAge = Convert.ToInt32(dr[2]);                  returnedValue.Add(tmp);              }              return returnedValue;          }         [WebMethod] //添加雇員信息          public void Insert(List<EmployeeModel> employee)          {              employee.ForEach( x =>              {                  string CmdText = "INSERT INTO Employee(EmployeeName,EmployeeAge) VALUES('"+x.EmployeeName+"',"+x.EmployeeAge.ToString()+")";                  SQLExcute(CmdText);              });          }          [WebMethod] //更新雇員信息         public void Update(List<EmployeeModel> employee)          {             employee.ForEach(x =>             {                  string CmdText = "UPDATE Employee SET EmployeeName='"+x.EmployeeName+"',EmployeeAge="+x.EmployeeAge.ToString();                  CmdText += " WHERE EmployeeID="+x.EmployeeID.ToString();                  SQLExcute(CmdText);              });          }          [WebMethod] //刪除雇員信息         public void Delete(List<EmployeeModel> employee)          {              employee.ForEach(x =>             {                  string CmdText = "DELETE FROM Employee WHERE EmployeeID="+x.EmployeeID.ToString();                  SQLExcute(CmdText);              });          }         //執(zhí)行SQL命令文本,重載1          private void SQLExcute(string SQLCmd)          {              string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath(@"App_Data\Employees.mdb;");              OleDbConnection Conn = new OleDbConnection(ConnectionString);              Conn.Open();              OleDbCommand Cmd = new OleDbCommand();              Cmd.Connection = Conn;              Cmd.CommandTimeout = 15;              Cmd.CommandType = CommandType.Text;              Cmd.CommandText = SQLCmd;              Cmd.ExecuteNonQuery();              Conn.Close();          }          //執(zhí)行SQL命令文本,重載2          private void SQLExcute(string SQLCmd,OleDbCommand Cmd)          {              string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" + Server.MapPath(@"App_Data\Employees.mdb;");              OleDbConnection Conn = new OleDbConnection(ConnectionString);              Conn.Open();              Cmd.Connection = Conn;              Cmd.CommandTimeout = 15;              Cmd.CommandType = CommandType.Text;              Cmd.CommandText = SQLCmd;              Cmd.ExecuteNonQuery();          }      }  }

之后,在Silverlight客戶端應用程序文件夾下,右擊References文件夾,選擇菜單選項Add Service Reference...。如下圖所示,引入剛才我們創(chuàng)建的Web Service(別忘了按Discover按鈕進行查找)。

Silverlight與Access互操作的實現(xiàn)方法

創(chuàng)建Silverlight客戶端應用程序

MainPage.xaml文件  <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"     mc:Ignorable="d" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit" x:Class="SilverlightClient.MainPage"      d:DesignWidth="320" d:DesignHeight="240"> <Grid x:Name="LayoutRoot" Width="320" Height="240" Background="White">  <dataFormToolkit:DataForm x:Name="dfEmployee" Margin="8,8,8,42"/> <Button x:Name="btnGetData" Height="30" Margin="143,0,100,8" VerticalAlignment="Bottom" Content="Get Data" Width="77"/> <Button x:Name="btnSaveAll" Height="30" Margin="0,0,8,8" VerticalAlignment="Bottom" Content="Save All" HorizontalAlignment="Right" Width="77"/> <TextBlock x:Name="tbResult" Height="30" HorizontalAlignment="Left" Margin="8,0,0,8" VerticalAlignment="Bottom" Width="122" TextWrapping="Wrap" FontSize="16"/> </Grid> </UserControl> MainPage.xaml.cs文件  using System;  using System.Collections.Generic;  using System.Collections.ObjectModel;  using System.Linq;  using System.Net;  using System.Windows;  using System.Windows.Controls;  using System.Windows.Documents;  using System.Windows.Input;  using System.Windows.Media;  using System.Windows.Media.Animation;  using System.Windows.Shapes;  using System.Xml;  using System.Xml.Linq;  using System.Windows.Browser;  using SilverlightClient.EmployeesInfoServiceReference;  namespace SilverlightClient  {      public partial class MainPage : UserControl      {          int originalNum;//記錄初始時的Employee表中的數(shù)據(jù)總數(shù)          ObservableCollection<EmployeeModel> deletedID = new ObservableCollection<EmployeeModel>();//標記被刪除的對象         public MainPage()          {              InitializeComponent();              this.Loaded += new RoutedEventHandler(MainPage_Loaded);              this.btnGetData.Click += new RoutedEventHandler(btnGetData_Click);              this.btnSaveAll.Click += new RoutedEventHandler(btnSaveAll_Click);               this.dfEmployee.DeletingItem += new EventHandler<System.ComponentModel.CancelEventArgs>(dfEmployee_DeletingItem);          }          void dfEmployee_DeletingItem(object sender, System.ComponentModel.CancelEventArgs e)          {              deletedID.Add(dfEmployee.CurrentItem as EmployeeModel);//正在刪除時,將被刪除對象進行標記,以便傳給服務(wù)端真正刪除。          }          void btnSaveAll_Click(object sender, RoutedEventArgs e)          {              List<EmployeeModel> updateValues = dfEmployee.ItemsSource.Cast<EmployeeModel>().ToList();              ObservableCollection<EmployeeModel> returnValues = new ObservableCollection<EmployeeModel>();              if (updateValues.Count > originalNum)              {                  //添加數(shù)據(jù)                  for (int i = originalNum; i <= updateValues.Count - 1; i++)                  {                      returnValues.Add(updateValues.ToArray()[i]);                  }                  EmployeesInfoWebServiceSoapClient webClient = new EmployeesInfoWebServiceSoapClient();                  webClient.InsertCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(webClient_InsertCompleted);                  webClient.InsertAsync(returnValues);                  //必須考慮數(shù)據(jù)集中既有添加又有更新的情況                  returnValues.Clear();                  updateValues.ForEach(x => returnValues.Add(x));                  webClient.UpdateCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(webClient_UpdateCompleted);                  webClient.UpdateAsync(returnValues);              }              else if (updateValues.Count < originalNum)              {                  //刪除數(shù)據(jù)                  EmployeesInfoWebServiceSoapClient webClient = new EmployeesInfoWebServiceSoapClient();                  webClient.DeleteCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(webClient_DeleteCompleted);                  webClient.DeleteAsync(deletedID);              }              else              {                 //更新數(shù)據(jù)                  updateValues.ForEach(x => returnValues.Add(x));                  EmployeesInfoWebServiceSoapClient webClient = new EmployeesInfoWebServiceSoapClient();                  webClient.UpdateCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(webClient_UpdateCompleted);                  webClient.UpdateAsync(returnValues);             }          }          void webClient_UpdateCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)          {              tbResult.Text = "更新成功!";          }          void webClient_DeleteCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)          {              tbResult.Text = "刪除成功!";          }          void webClient_InsertCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)          {              tbResult.Text = "添加成功!";          }          void btnGetData_Click(object sender, RoutedEventArgs e)          {              GetEmployees();          }          void MainPage_Loaded(object sender, RoutedEventArgs e)          {              GetEmployees();          }          void GetEmployees()          {              EmployeesInfoWebServiceSoapClient webClient = new EmployeesInfoWebServiceSoapClient();              webClient.GetEmployeesInfoCompleted +=              new EventHandler<GetEmployeesInfoCompletedEventArgs>(webClient_GetEmployeesInfoCompleted);              webClient.GetEmployeesInfoAsync();          }          void webClient_GetEmployeesInfoCompleted(object sender, GetEmployeesInfoCompletedEventArgs e)          {              originalNum = e.Result.Count;//記錄原始數(shù)據(jù)個數(shù)              dfEmployee.ItemsSource = e.Result;          }      }  }

最終效果圖

Silverlight與Access互操作的實現(xiàn)方法

“Silverlight與Access互操作的實現(xiàn)方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI