ユニバーサル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アプリのより良い技術リファレンスが必要です。
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
私もこの同じ道を歩かなければなりません... EF Coreから直接SQLServerに直接アクセスできることを楽しみにしています。
私は上記の両方のチュートリアルを見ましたが、私は開発に慣れていないので、それは私の食欲を濡らすだけです。しかし、私はこの詳細な ビデオチュートリアル を見つけました。
このビデオは英語ではありませんが、彼が何をしていたのかを見て、一時停止して複製することができました。
注:Windows 10 Fall Creators Update(16299)から、.NetStanded 2.0を使用してSQL Serverデータベースに直接アクセスできます
SQL Serverに直接接続する方法はないため、SQL Serverに接続するにはデータベース用のAPIを作成する必要があります。
このソリューションは
Entity Frameworkを使用して、アクションを持つWeb API 2コントローラーを選択し、[追加]をクリックします
Model class(テーブル名)およびData context class(データベース名)を選択します)ドロップダウンリストボックスから[追加] をクリックします
HttpClient httpClient = new HttpClient();
var jsonReponse = await httpClient.GetStringAsync("http://localhost:xxxxx/api/LogIns");
logInResult = JsonConvert.DeserializeObject<List<LogIn>>(jsonReponse);
UWPプロジェクトで同じクラスを作成するだけです
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ライブラリを使用した逆シリアル化の詳細については