如何从 Windows 10 UWP 应用程序连接到 SQL 服务器数据库 [英] How to connect to SQL server database from a Windows 10 UWP app

查看:35
本文介绍了如何从 Windows 10 UWP 应用程序连接到 SQL 服务器数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从通用 Windows 应用程序连接到本地 MS SQL 数据库.我正在使用 UWP 制作 LOB 应用程序,以支持台式机、平板电脑和移动设备的使用.在尝试连接到本地(内网)SQL 服务器数据库时,我习惯于使用 SqlConnection 连接到本地服务器,但是由于 SqlConnection 不包含在 UWP 中使用的 .NET 子集中,所以使用时如何做到这一点UWP?

I'm trying to connect to an on-prem MS SQL database from a universal windows app. I'm making a LOB app using UWP, to support desktop, tablet and mobile use. When trying to connect to a local (intranet) SQL server database, I'm used to using an instance of SqlConnection to connect to a local server, but since SqlConnection is not included in the .NET subset used in UWP, how is this done when using UWP?

我查看了微软官方示例以及操作指南,并没有发现任何关于数据库连接的信息Azure 数据库.DbConnection 似乎可以是一个不错的方法,但不能使用,因为它是抽象的,而且是子项(例如 Data.SqlClient.SqlConnection) 似乎没有包含在 UWP 的 .NET 子集中.

I've looked over the 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) does not seem to be included in the .NET subset for UWP.

我在这里遗漏了一些非常明显的东西吗?顺便说一句,有人知道 UWP 的良好命名空间参考吗?

Am I missing something super obvious here? As an aside, does anyone know a good namespace reference for UWP?

针对非重复进行建议为重复的链接问题适用于 Windows 8/8.1 应用程序,虽然存在一些相似之处,但该问题的已接受答案中的代码不适用于 UWP.但是原理是一样的,但是对于使用 UWP 构建的 Windows 10 应用程序应该有更好的技术参考.

Edit for non-duplicate: The linked question suggested as a duplicate is for Windows 8/8.1 apps, and while there are some similarities, the code in the accepted answer for that question won't work on UWP. The principle is the same, however, but there should be a better technical reference for Windows 10 apps build with UWP.

推荐答案

借助 Windows 10 Fall Creators Update(内部版本 16299),UWP 应用现在可以通过标准 NET 类 (System.Data.SqlClient) 直接访问 SQL Server - 谢谢到 UWP 中新添加的对 .NET Standard 2.0 的支持.

With the Windows 10 Fall Creators Update (build 16299) UWP apps can now access SQL Server directly via the standard NET classes (System.Data.SqlClient) - thanks to the newly added support for .NET Standard 2.0 in UWP.

这是一个 Northwind UWP 演示应用程序:https://github.com/StefanWickDev/IgniteDemos

Here is a Northwind UWP demo app: https://github.com/StefanWickDev/IgniteDemos

我们已于 2017 年 9 月在 Microsoft Ignite 上展示了此演示,以下是我们的会话录音(SQL 演示跳至 23:00):https://myignite.microsoft.com/sessions/53541

We have presented this demo at Microsoft Ignite in September 2017, here is the recording of our session (skip to 23:00 for the SQL demo): https://myignite.microsoft.com/sessions/53541

这是从 Northwind 数据库中检索产品的代码(请参阅演示中的 DataHelper.cs).请注意,它与您为 Winforms 或 WPF 应用程序编写的代码完全相同 - 感谢 .NET Standard 2.0:

Here is the code to retrieve the products from the Northwind database (see DataHelper.cs in the demo). Note that it is exactly the same code that you would write for a Winforms or WPF app - thanks to the .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/示例/SQLServer

If you need to support earlier versions than the Fall Creators Update, there is also a way for you to call SqlClient APIs from your UWP app package, via the Desktop Bridge. I have a sample for this published here: https://github.com/Microsoft/DesktopBridgeToUWP-Samples/tree/master/Samples/SQLServer

这篇关于如何从 Windows 10 UWP 应用程序连接到 SQL 服务器数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆