サービスを使用せずにUWPアプリケーションからMySQLデータにアクセスする









WindowsストアアプリケーションおよびUWPアプリケーションでは、Webサービスを使用してネットワークに保存されているデータベースにアクセスする必要があります。 Azureデータベースを使用する場合、 Azure Mobile Appsなどのサービスを使用できます



では、「悪い」ことを教え、Connector / Netを使用してUWPアプリケーションのMySQLデータベースからデータに直接アクセスする方法について説明します。 コードは、.Net WPFアプリケーションと同じです。











明らかな理由により、直接データアクセスの使用は推奨されません。 接続文字列はアプリケーションに保存されるため、アプリケーションをダウンロードした人は誰でも回線にアクセスできます。 これは、UWPアプリケーションがデータを直接操作する特定の機能を欠いている理由の1つです。 さらに、サービスロジックを更新すると、それに接続されているすべてのアプリケーションがすぐに影響を受けますが、すべてのユーザーにアプリケーションの即時更新を強制すると失敗します。



推奨されない方法を使用する理由 いくつかのユースケースを見つけることができます。 たとえば、電話レコードの便利な編集のために、MySQLデータベース管理パネルアプリケーションを作成するオプションを思いつきました。 もちろん、読み取り専用権限を持つユーザーを作成するオプションもあります。 接続文字列でサーバー名とデータベース名が危険にさらされているにもかかわらず、場合によっては使用できます。 または、ユーザーに毎回認証に必要なデータを入力させることができます。



テストデータベースとして、Azureで作成できるClearDB MySQLクラウドデータベースを使用します。 無料の学生DreamSparkアカウントの所有者は、このようなデータベースを無料で作成できます。 ただし、ここで説明する方法は、Azureクラウドにデプロイされたデータベースだけでなく、あらゆるMySQLデータベースに適しています。



ベースの作成は非常に簡単です。 新しいAzureポータルで、メニューのプラス記号をクリックし、[データ+ストレージ]-[MySQLデータベース]を選択し、データベースの名前を設定し、パラメーターを構成して条件に同意します。







すぐにベースが展開されます。







これで、プロパティに接続文字列が見つかります。







前述したように、MySQLデータベースを使用するには、Connector / Netが必要です。



この例を書いている時点で、NuGetはMySQL.Net Connector / Netバージョン6.6.4を検索用に発行しました

mysql Chapter 2 Connector / Net Versions Webサイトでは、WinRTアプリケーションはバージョン6.7以降でサポートされていると述べています。

そのため、公式サイトからインストーラーをダウンロードする必要があります: コネクタ/ネットのダウンロード



インストーラーを使用してインストールする場合、C#およびVBにサンプルをインストールするように求められます。 これらの例は.Netバージョン2.0にあったので、特に関係ないように思えました(.Netもインストールしていませんでした)。



アプリケーションの作成に移りましょう。 Visual Studioでは、ユニバーサルWindowsアプリケーションプロジェクトを作成します。 ライブラリMySql.Data.RT.dllへのリンクを追加します。

C:\ Program Files(x86)\ MySQL \ MySQL Connector Net 6.9.8 \ Assemblies \ RT \

公式には、UWPはまだサポートされていませんが、WinRTライブラリはユニバーサルアプリケーションに非常に適しています(結局、UWPはすべてのWinRTがUWPで利用可能または使用されているわけではありませんが、WinRT APIに基づいています)。



WPFアプリケーションがある場合は、ライブラリが必要です

C:\ Program Files \ MySQL \ MySQL Connector Net 6.9.8 \ Assemblies \ v4.5 \ MySql.Data.dll



ユニバーサルアプリケーションのマニフェストで、インターネット(インターネット)を使用する機能を追加する必要があります。 通常、この機能はデフォルトでインストールされるため、チェックマークが正しい場所にあることを確認してください。



コードを書くことができます。

MySQLクラスが配置されている名前空間はMySql.Data.MySqlClientです。 コードで毎回言及しないように追加します:



using MySql.Data.MySqlClient;
      
      





まず、テーブルを作成してデータを入力する方法の例:



  using (MySqlConnection connection = new MySqlConnection("Database=as_bfb6f501597b777;Data Source=us-cdbr-azure-west-c.cloudapp.net;User Id=b74038821f5aea;Password=2564f4e5;SslMode=None;")) { connection.Open(); MySqlCommand createCommand = new MySqlCommand("CREATE TABLE demotable(salary int,surname varchar(255))", connection); createCommand.ExecuteNonQuery(); MySqlCommand addCommand = new MySqlCommand("INSERT INTO demotable (salary,surname) VALUES (1234,'')", connection); addCommand.ExecuteNonQuery(); }
      
      





ここでは、2つのフィールド(salaryとsurname)を含むdemotableというテーブルを作成し、姓と給与の値を含む行を挿入しました。 姓がVaderの従業員は、サービスに対して1234を受け取ります。

接続文字列に注意してください。 ポータルから彼女を連れて行った。 コネクタ/ネットはまだSSLをサポートしていないため、最後に「 SslMode = None; 」を追加する必要があります。



データを読み取る簡単な例。

データベースと同じフィールドを持つモデルクラスを作成する必要があります。 このようにします:



  public class CloudTable { private string _surname; public string surname { get { return _surname; } set { _surname = value; } } private int _salary; public int salary { get { return _salary; } set { _salary = value; } } }
      
      





次に、ページのコードでコレクションを宣言できます。



  public ObservableCollection<CloudTable> demodata = new ObservableCollection<CloudTable>();
      
      





ListViewにデータを表示します。 XAMLコードは次のようにします。



  <ListView x:Name="myListView" Width="400" Height="400" Margin="20,20,0,0" ItemsSource="{Binding}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel> <TextBlock Text="{Binding Path=surname}"></TextBlock> <TextBlock Text="{Binding Path=salary}"></TextBlock> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView>
      
      





ご覧のとおり、私はあまり気にしませんでした。リストアイテムの表示テンプレートは、単純にパネルの形で作成され、その中に2つのテキストブロックがあります。 ブロックのテキスト値は、データコンテキストの姓と給与の値にマップされます。 データコンテキストをC#コードで設定します。 必要に応じて、もちろん、より良いデザインを作成できます。



データをコレクションに読み込み、それをListViewにバインドするためのコード自体は次のとおりです。



  using (MySqlConnection connection = new MySqlConnection("Database=as_bfb6f501597b777;Data Source=us-cdbr-azure-west-c.cloudapp.net;User Id=b74038821f5aea;Password=2564f4e5;SslMode=None;")) { connection.Open(); MySqlCommand readCommand = new MySqlCommand("SELECT * FROM demotable", connection); using (MySqlDataReader reader = readCommand.ExecuteReader()) { while (reader.Read()) { demodata.Add(new CloudTable { surname = reader.GetString(1), salary = reader.GetInt32(0) }); } } } myListView.DataContext = demodata;
      
      





データはループで読み取られ、少なくとも古風に見えます。 ただし、存在する機会を与えてくれたConnector / Netに感謝します。



All Articles