如何从 Windows 10 UWP 应用程序连接到 SQL 服务器数据库
How to connect to SQL server database from a Windows 10 UWP app
我正在尝试从通用 windows 应用程序连接到本地 MS SQL 数据库。我正在使用 UWP 制作 LOB 应用程序,以支持桌面、平板电脑和移动设备的使用。当尝试连接到本地(内联网)SQL 服务器数据库时,我习惯使用 SqlConnection 的实例连接到本地服务器,但由于 SqlConnection 不包含在 .NET 子集中在UWP中使用,在使用UWP时是怎么做到的?
我查看了 official Microsoft samples as well as the how-to guides, and found nothing there about database connection that is not an Azure database. DbConnection seemed like it could be a good way to go, but can't be used since it's abstract, and it's children (for instance Data.SqlClient.SqlConnection) 似乎没有包含在 UWP 的 .NET 子集中。
我是不是漏掉了一些非常明显的东西?另外,有人知道 UWP 的良好命名空间参考吗?
针对非重复项进行编辑:建议作为重复项的链接问题适用于 Windows 8/8.1 应用程序,虽然有一些相似之处,但该问题的已接受答案中的代码将不起作用在 UWP 上。然而,原理是一样的,但应该有更好的技术参考 Windows 10 个使用 UWP 构建的应用程序。
这是一个simple sample and a video。不确定这对你来说是否足够。
这里有个难点是
- 如何使用、序列化和反序列化 json 数据。作为 .net 开发人员,您可以考虑使用 HttpClient 来实现它。这里 another sample and video for your reference. There is another official sample 展示了如何使用 Windows.Data.Json 命名空间。
我也不得不走同样的路...期待 SQL可以通过 EF Core 直接访问服务器。
上面的两个教程我都看过了,因为我是开发新手,所以只满足了我的胃口。不过,我确实在 YouTube 上找到了这个详细的 Video Tutorial,可以引导您完成;
- 创建网络服务
- 在 WebService 和您的 UWP 应用程序中创建重复的 POGO 类
- 正在创建 Web API 2.0 Entity Framework 为您要创建的每个 Table 控制器
- 通过 NuGet 添加 Newtonsoft.JSON 和 Microsoft.Net.HTTP 到您的 UWP 应用程序
- 最后通过 Web 服务从 UWP 调用回本地 SQL 服务器/JSON 在代码隐藏中调用。
尽管这个视频不是英文的,但我能够看到他在做什么,然后暂停并复制。
正在将 UWP 连接到 SQL 服务器
注意:从 windows 10 Fall Creators Update (16299) 开始,我们可以使用 .NetStanded 2.0
直接访问 SQL 服务器数据库
由于无法直接连接到 SQL 服务器,我们需要为我们的数据库创建一个 API 以便连接到 SQL 服务器。
此解决方案描述了
- 正在创建API
- 序列化和反序列化JSON数据
1。创建 API
1) 安装 ASP.NET 和网络开发
启动Visual Studio安装程序并点击修改
安装ASP.NET和网络开发
2) 创建新的 ASP.NET Web 应用程序(.Net 框架)
在您的解决方案中添加新项目
Select ASP.NET Web Application (.Net Framework) 并给出项目名称
Select Web API 然后点击确定
3) 连接到 SQL 服务器数据库
在模型文件夹中添加新项目
Select ADO.NET 实体数据模型 并为其命名
Select 来自数据库的 EF Designer 然后单击下一步
单击新建连接
配置您的连接,点击确定,然后点击下一步
SelectEntity Framework版本点击下一步
Select 数据库和表 连接并单击完成
4) 添加控制器与模型通信
在继续之前重建你的项目
在控制器文件夹中添加新控制器
Select Web API 2 带动作的控制器,使用 Entity Framework 然后点击添加
Select模型class(table名称)和数据上下文class(数据库名称)从下拉列表框中单击添加
5) 测试 API
将此项目设为启动项目
运行 Web 浏览器中的项目
现在您的浏览器将打开一个本地主机站点。 点击顶部的API
此页面显示了您的项目中可用的所有 API
从下面复制任何 API link 并将其替换为 URI 中的 "Help" 并按 Enter。现在您应该能够从 SQL 服务器数据库中看到您的数据
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);
您可以从模型中获取模型 class
只需在您的 UWP 项目中创建相同的 class
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 Serialization And Deserialization Using JSON.NET Library In C#
的更多信息
有了 Windows 10 秋季创作者更新(内部版本 16299),UWP 应用程序现在可以通过标准 NET 类 (System.Data.SqlClient) 直接访问 SQL 服务器 - 谢谢在 UWP 中新增对 .NET Standard 2.0 的支持。
这是 Northwind UWP 演示应用程序:
https://github.com/StefanWickDev/IgniteDemos
我们已于 2017 年 9 月在 Microsoft Ignite 上展示了此演示,这是我们 session 的录音(跳至 23:00 了解 SQL 演示):
https://myignite.microsoft.com/sessions/53541
这是从 Northwind 数据库中检索产品的代码(请参阅演示中的 DataHelper.cs)。请注意,它与您为 Winforms 或 WPF 应用程序编写的代码完全相同 - 感谢 .NET Standard 2.0:
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 的版本,您还可以通过 Desktop Bridge 从 UWP 应用程序包调用 SqlClient API。我在这里发布了一个示例:
https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer
我正在尝试从通用 windows 应用程序连接到本地 MS SQL 数据库。我正在使用 UWP 制作 LOB 应用程序,以支持桌面、平板电脑和移动设备的使用。当尝试连接到本地(内联网)SQL 服务器数据库时,我习惯使用 SqlConnection 的实例连接到本地服务器,但由于 SqlConnection 不包含在 .NET 子集中在UWP中使用,在使用UWP时是怎么做到的?
我查看了 official Microsoft samples as well as the how-to guides, and found nothing there about database connection that is not an Azure database. DbConnection seemed like it could be a good way to go, but can't be used since it's abstract, and it's children (for instance Data.SqlClient.SqlConnection) 似乎没有包含在 UWP 的 .NET 子集中。
我是不是漏掉了一些非常明显的东西?另外,有人知道 UWP 的良好命名空间参考吗?
针对非重复项进行编辑:建议作为重复项的链接问题适用于 Windows 8/8.1 应用程序,虽然有一些相似之处,但该问题的已接受答案中的代码将不起作用在 UWP 上。然而,原理是一样的,但应该有更好的技术参考 Windows 10 个使用 UWP 构建的应用程序。
这是一个simple sample and a video。不确定这对你来说是否足够。
这里有个难点是
- 如何使用、序列化和反序列化 json 数据。作为 .net 开发人员,您可以考虑使用 HttpClient 来实现它。这里 another sample and video for your reference. There is another official sample 展示了如何使用 Windows.Data.Json 命名空间。
我也不得不走同样的路...期待 SQL可以通过 EF Core 直接访问服务器。
上面的两个教程我都看过了,因为我是开发新手,所以只满足了我的胃口。不过,我确实在 YouTube 上找到了这个详细的 Video Tutorial,可以引导您完成;
- 创建网络服务
- 在 WebService 和您的 UWP 应用程序中创建重复的 POGO 类
- 正在创建 Web API 2.0 Entity Framework 为您要创建的每个 Table 控制器
- 通过 NuGet 添加 Newtonsoft.JSON 和 Microsoft.Net.HTTP 到您的 UWP 应用程序
- 最后通过 Web 服务从 UWP 调用回本地 SQL 服务器/JSON 在代码隐藏中调用。
尽管这个视频不是英文的,但我能够看到他在做什么,然后暂停并复制。
正在将 UWP 连接到 SQL 服务器
注意:从 windows 10 Fall Creators Update (16299) 开始,我们可以使用 .NetStanded 2.0
直接访问 SQL 服务器数据库由于无法直接连接到 SQL 服务器,我们需要为我们的数据库创建一个 API 以便连接到 SQL 服务器。
此解决方案描述了
- 正在创建API
- 序列化和反序列化JSON数据
1。创建 API
1) 安装 ASP.NET 和网络开发
启动Visual Studio安装程序并点击修改
安装ASP.NET和网络开发
2) 创建新的 ASP.NET Web 应用程序(.Net 框架)
在您的解决方案中添加新项目
Select ASP.NET Web Application (.Net Framework) 并给出项目名称
Select Web API 然后点击确定
3) 连接到 SQL 服务器数据库
在模型文件夹中添加新项目
Select ADO.NET 实体数据模型 并为其命名
Select 来自数据库的 EF Designer 然后单击下一步
单击新建连接
配置您的连接,点击确定,然后点击下一步
SelectEntity Framework版本点击下一步
Select 数据库和表 连接并单击完成
4) 添加控制器与模型通信
在继续之前重建你的项目
在控制器文件夹中添加新控制器
Select Web API 2 带动作的控制器,使用 Entity Framework 然后点击添加
Select模型class(table名称)和数据上下文class(数据库名称)从下拉列表框中单击添加
5) 测试 API
将此项目设为启动项目
运行 Web 浏览器中的项目
现在您的浏览器将打开一个本地主机站点。 点击顶部的API
此页面显示了您的项目中可用的所有 API
从下面复制任何 API link 并将其替换为 URI 中的 "Help" 并按 Enter。现在您应该能够从 SQL 服务器数据库中看到您的数据
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);
您可以从模型中获取模型 class
只需在您的 UWP 项目中创建相同的 class
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 Serialization And Deserialization Using JSON.NET Library In C#
的更多信息有了 Windows 10 秋季创作者更新(内部版本 16299),UWP 应用程序现在可以通过标准 NET 类 (System.Data.SqlClient) 直接访问 SQL 服务器 - 谢谢在 UWP 中新增对 .NET Standard 2.0 的支持。
这是 Northwind UWP 演示应用程序: https://github.com/StefanWickDev/IgniteDemos
我们已于 2017 年 9 月在 Microsoft Ignite 上展示了此演示,这是我们 session 的录音(跳至 23:00 了解 SQL 演示): https://myignite.microsoft.com/sessions/53541
这是从 Northwind 数据库中检索产品的代码(请参阅演示中的 DataHelper.cs)。请注意,它与您为 Winforms 或 WPF 应用程序编写的代码完全相同 - 感谢 .NET Standard 2.0:
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 的版本,您还可以通过 Desktop Bridge 从 UWP 应用程序包调用 SqlClient API。我在这里发布了一个示例: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer