【问题标题】:How to connect to SQL Server with Flutter?如何使用 Flutter 连接 SQL Server?
【发布时间】:2021-03-08 20:38:11
【问题描述】:

我必须将 SQL Server 与 Flutter 一起使用,而且我没有其他数据库选项,因为我的客户端有它。我一直在寻找包,但我只找到了一个不能在移动设备上运行的包。如果没有 Web 服务或 api,是否有任何选项可以做到这一点?

【问题讨论】:

  • 您是说您的应用程序应该直接从手机通过互联网连接到 SQL Server 实例吗?因为那将是一个非常不寻常、不安全和低效的设置。 (TDS 是一种基于状态的协议,它不适用于瞬态客户端。)您很难找到库的原因是这种场景的市场非常小。中间 Web API 是您的最佳选择。
  • 可以在运行sql server的服务器中安装node.js吗?然后你可以使用node.js访问sql server。您可以通过多种方式将节点与 Flutter 应用程序连接起来,包括(1)socket.io,(2)restful api

标签: sql-server flutter


【解决方案1】:

您需要考虑的第一件事是没有直接且极其有效的解决方案,您必须决定要使用哪些框架和工具。正如评论中提到的那样,这种情况的市场非常小。但是有一些方法可以解决这个问题。

远程存储示例解决方案:

这是一个基本示例,说明您应该如何实现这一点。这个SO post也引用了:

客户端应用程序

客户端应用程序可以是用户通常使用的任何应用程序。 一些例子:

  • 移动应用程序(用本机、Dart、Xamarin 等编写)
  • 桌面应用程序(Electron、WPF、...)
  • 网站应用程序(Angular、React、Vue 等)

API

API 用于检索数据和更改数据。但它也会 处理身份验证、授权、日志记录、执行业务逻辑

数据库

然后您的 API 将执行查询、插入、更新、删除、执行 您选择的数据库上的存储过程。在您的示例 SQL 服务器。

设置方法有很多种,具体取决于您的 技能、框架知识、您希望如何部署。

您希望如何部署它也会限制您的选择。为您 接口:

  • 无服务器 API(通过 Azure Functions、AWS Lambda)
  • 云网站(Azure Web 应用)
  • 网站托管在本地
  • Docker 容器

在现实生活场景中,防火墙通常会变得更加复杂, 应用程序网关、虚拟网络、集群。

【讨论】:

    【解决方案2】:

    您可以在服务器上安装 SQLServerSocket:

    https://github.com/nippur72/SqlServerSocket

    在安装了SQL Server的服务器机器上后台安装并执行SqlServerSocket.exe。

    另外,你需要一个客户:

    https://github.com/nippur72/SqlServerSocket/tree/master/DartClient

    您可以尝试一些直接连接到您的 DDBB 的连接和查询:

    // creates a connection 
    var conn = new 
    SqlConnection("SERVER=localhost;Database=mydb;Trusted_connection=yes");
    
    // open connection
    await conn.open();
    
    // runs a query returning a single value
    var howmany = await conn.queryValue("SELECT COUNT(*) FROM Customers");
    
    // runs a query returning a single row
    var myFirstCustomer = await conn.querySingle("SELECT name,age FROM Custormers");
    print(myFirstCustomer["name"]);
    
    // runs a query returning all rows
    var customers = await conn.query("SELECT TOP 10 name,age FROM Custormers");
    for(var customer in customers)
    {
       print(customer["name"]);
    }
    
    // execute a command, returning the number of rows affected
    var n = await conn.execute("UPDATE Customers SET age=0");
    print("zeroed $n customers");
    
    // disconnect
    await conn.close();
    

    【讨论】:

      猜你喜欢
      • 2013-09-09
      • 2018-11-26
      • 2014-03-03
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多