我尝试从通用Windows应用程序连接到本地MS SQL数据库。我正在使用UWP制作LOB应用程序,以支持桌面,平板电脑和移动应用。当尝试连接到本地(Intranet)SQL Server数据库时,我曾经使用SqlConnection的实例连接到本地服务器,但由于SqlConnection不包含在.NET子集中使用UWP,使用UWP时如何完成?
我查看了official Microsoft samples以及how-to guides,但没有发现任何与Azure数据库不同的数据库连接。 DbConnection似乎是一种很好的方式,但不能使用,因为它是抽象的,它的孩子(例如Data.SqlClient.SqlConnection)不会似乎包含在UWP的.NET子集中。
我错过了一些非常明显的东西吗?顺便说一句,是否有人知道UWP的良好命名空间参考?
编辑非重复:建议重复的链接问题适用于Windows 8 / 8.1应用程序,虽然存在一些相似之处,但该问题的已接受答案中的代码无法在UWP上运行。但原则是相同的,但对于使用UWP构建的Windows 10应用程序,应该有更好的技术参考。
答案 0 :(得分:10)
借助Windows 10 Fall Creators Update(版本16299),UWP应用程序现在可以通过标准的.NET类(System.Data.SqlClient)直接访问SQL Server - 这要归功于UWP中新增的.NET Standard 2.0支持。 / p>
这是一个Northwind UWP演示应用: https://github.com/StefanWickDev/IgniteDemos
我们已于2017年9月在Microsoft Ignite上演示了此演示,以下是我们会话的录制内容(对于SQL演示,请跳至23:00): 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的早期版本,还可以通过桌面桥从您的UWP应用包中调用SqlClient API。我在这里发布了一个样本: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer
答案 1 :(得分:4)
这是simple sample和a video。不确定它对你来说是否足够。
这是一个难点
答案 2 :(得分:2)
我也不得不走同样的道路......期待直接通过EF Core直接访问SQLServer。
我已经看过上面的两个教程,因为我是新手,所以只会影响我的胃口。但是,我确实在YouTube上找到了这个详细的Video Tutorial,它可以引导您通过;
尽管这个视频不是英文的,但我能够看到他在做什么然后暂停和复制。
答案 3 :(得分:1)
注意:从Windows 10 Fall Creators Update(16299)我们可以使用.NetStanded 2.0直接访问SQL Server数据库
由于没有直接连接SQL Server的方法,我们需要为数据库创建一个API才能连接到SQL Server。
此解决方案描述
从下面复制任何API链接,并将其替换为"帮助"在URI中,按Enter键。现在,您应该能够从SQL Server数据库中查看数据
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 Serialization And Deserialization Using JSON.NET Library In C#
的更多信息