web-dev-qa-db-ja.com

Windows 10 UWPアプリからSQLサーバーデータベースに接続する方法

ユニバーサルWindowsアプリからオンプレミスのMS SQLデータベースに接続しようとしています。デスクトップ、タブレット、モバイルの使用をサポートするために、UWPを使用してLOBアプリを作成しています。ローカル(イントラネット)SQLサーバーデータベースに接続しようとすると、 SqlConnection のインスタンスを使用してローカルサーバーに接続することに慣れていますが、使用される.NETサブセットにはSqlConnectionが含まれていませんUWPでは、UWPを使用するときにこれはどのように行われますか?

Microsoftの公式サンプルhow-to guides を調べましたが、Azureデータベースではないデータベース接続については何も見つかりませんでした。 DbConnection は良い方法のように思えますが、抽象的であり、子であるため使用できません(たとえば Data.SqlClient.SqlConnection ) UWPの.NETサブセットに含まれているようです。

ここで非常に明白な何かを見逃していますか?余談ですが、UWPの適切な名前空間参照を知っている人はいますか?

非重複の編集:重複として提案されたリンクされた質問はWindows 8/8.1アプリ用であり、いくつかの類似点はありますが、その質問の受け入れられた回答のコードはUWPでは機能しません。ただし、原則は同じですが、UWPでビルドされたWindows 10アプリのより良い技術リファレンスが必要です。

13
Tobbe

Windows 10 Fall Creators Update(ビルド16299)では、UWPアプリが標準のNETクラス(System.Data.SqlClient)を介してSQL Serverに直接アクセスできるようになりました-UWPでの.NET Standard 2.0のサポートが新たに追加されたおかげです。

Northwind UWPデモアプリを次に示します。 https://github.com/StefanWickDev/IgniteDemos

2017年9月にMicrosoft Igniteでこのデモを発表しました。セッションの記録を次に示します(SQLデモの場合は23:00までスキップ): https://myignite.Microsoft.com/sessions/53541 =

Northwindデータベースから製品を取得するコードを次に示します(デモのDataHelper.csを参照)。 .NET Standard 2.0のおかげで、WinformsまたはWPFアプリ用に記述するコードとまったく同じであることに注意してください。

public static ProductList GetProducts(string connectionString)
{
    const string GetProductsQuery = "select ProductID, ProductName, QuantityPerUnit," +
        " UnitPrice, UnitsInStock, Products.CategoryID " +
        " from Products inner join Categories on Products.CategoryID = Categories.CategoryID " +
        " where Discontinued = 0";

    var products = new ProductList();
    try
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
            if (conn.State == System.Data.ConnectionState.Open)
            {
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = GetProductsQuery;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var product = new Product();
                            product.ProductID = reader.GetInt32(0);
                            product.ProductName = reader.GetString(1);
                            product.QuantityPerUnit = reader.GetString(2);
                            product.UnitPrice = reader.GetDecimal(3);
                            product.UnitsInStock = reader.GetInt16(4);
                            product.CategoryId = reader.GetInt32(5);
                            products.Add(product);
                        }
                    }
                }
            }
        }
        return products;
    }
    catch (Exception eSql)
    {
        Debug.WriteLine("Exception: " + eSql.Message);
    }
    return null;
}

Fall Creators Updateより前のバージョンをサポートする必要がある場合は、デスクトップブリッジを介して、UWPアプリパッケージからSqlClient APIを呼び出す方法もあります。ここに公開されているこのサンプルがあります: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer

12

単純なサンプル および ビデオ です。それで十分かどうかわかりません。

ここが難しい点です

  • jSONデータを消費、シリアル化、およびシリアル化解除する方法。 .net開発者は、HttpClientを使用してこれを実装することを検討できます。また、参照用に 別のサンプル および video があります。 別の公式サンプル があり、Windows.Data.Json名前空間の使用方法を示しています。
4
Alan Yao - MSFT

私もこの同じ道を歩かなければなりません... EF Coreから直接SQLServerに直接アクセスできることを楽しみにしています。

私は上記の両方のチュートリアルを見ましたが、私は開発に慣れていないので、それは私の食欲を濡らすだけです。しかし、私はこの詳細な ビデオチュートリアル を見つけました。

  • webServiceの作成
  • webServiceとUWPアプリで重複したPOGOクラスを作成する
  • 作成するテーブルごとにWeb API 2.0 Entity Framework Controllerを作成する
  • NuGetを介してUWPアプリにNewtonsoft.JSONとMicrosoft.Net.HTTPを追加する
  • 最後に、コードビハインドのWebサービス/ JSON呼び出しを介してUWPからローカルSQL Serverに呼び出しを戻します。

このビデオは英語ではありませんが、彼が何をしていたのかを見て、一時停止して複製することができました。

2
ekgcorp

UWPをSQL Serverに接続する

注:Windows 10 Fall Creators Update(16299)から、.NetStanded 2.0を使用してSQL Serverデータベースに直接アクセスできます

SQL Serverに直接接続する方法はないため、SQL Serverに接続するにはデータベース用のAPIを作成する必要があります。

このソリューションは

  1. APIの作成
  2. JSONデータのシリアル化と逆シリアル化

1. APIを作成する

1)ASP.NETおよびWeb開発のインストール

  1. Visual Studio Installerを起動し、変更をクリックします enter image description here

  2. インストールASP.NETおよびWeb開発enter image description here

2)新しいASP.NET Webアプリケーション(.Net Framework)の作成

  1. ソリューションに新しいプロジェクトを追加enter image description here

  2. ASP.NET Webアプリケーション(.Net Framework)を選択し、プロジェクト名を指定 enter image description here

  3. Web APIを選択し、[OK]をクリックします enter image description here

3)SQL Serverデータベースへの接続

  1. Modelsフォルダーに新しいアイテムを追加enter image description here

  2. ADO.NET Entity Data Modelを選択し、名前を付けます enter image description here

  3. データベースからEF Designerを選択し、次へをクリックします enter image description here

  4. クリック新しい接続enter image description here

  5. 接続を構成します、OKをクリックして次へをクリックします enter image description here

  6. Entity Frameworkバージョンを選択し、次へをクリックしてください enter image description here

  7. 接続するデータベースとテーブルを選択し、完了をクリックします enter image description here

4)モデルと通信するコントローラーを追加する

  1. 先に進む前にプロジェクトを再構築してください enter image description here

  2. Controllersフォルダーに新しいコントローラーを追加enter image description here

  3. Entity Frameworkを使用して、アクションを持つWeb API 2コントローラーを選択し、[追加]をクリックします enter image description here

  4. Model class(テーブル名)およびData context class(データベース名)を選択します)ドロップダウンリストボックスから[追加] をクリックしますenter image description here

5)APIのテスト

  1. このプロジェクトをstartupプロジェクトとして設定しますenter image description here

  2. Webブラウザーでプロジェクトを実行enter image description here

  3. これで、ブラウザがlocalhostサイトを開きます。 上部の[API]をクリック enter image description here

  4. このページには、プロジェクトから利用可能なすべてのAPIが表示されます enter image description here

  5. 下からAPIリンクをコピーし、URIの「ヘルプ」に置き換えてEnterキーを押します。これで、SQL Serverデータベースのデータを表示できるはずです enter image description here

2. JSONデータのシリアル化と逆シリアル化

1) Newtonsoft.Json をインストールします

2)JSONの逆シリアル化

HttpClient httpClient = new HttpClient();
var jsonReponse = await httpClient.GetStringAsync("http://localhost:xxxxx/api/LogIns");
logInResult = JsonConvert.DeserializeObject<List<LogIn>>(jsonReponse);

モデルからモデルクラスを取得できます enter image description here

UWPプロジェクトで同じクラスを作成するだけです

3)JSONのシリアル化

var logIn = new Models.LogIn()
{
    Username = "username",
    Password = "password"
};
var logInJson = JsonConvert.SerializeObject(logIn);

HttpClient httpClient = new HttpClient();
var httpContent = new StringContent(logInJson);
httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");

await httpClient.PostAsync("http://localhost:56267/api/LogIns", httpContent);

JSONのシリアル化とC# でJSON.NETライブラリを使用した逆シリアル化の詳細については

1
Vijay Nirmal