Flutter数据库连接插件dart_mssql的使用

Flutter数据库连接插件dart_mssql的使用

dart_mssql

适用于Dart(32位和64位)的高性能Microsoft SQL Server (MS-SQL Server)驱动程序。


重要事项

  • 此插件不适合Flutter或Web项目。它仅适用于服务器端应用程序。
  • 它仅在Windows(32位或64位)上运行。
  • 您需要安装OLE DB驱动程序。
  • 您需要安装Microsoft Visual C++ Redistributable。
  • dart_mssql_32.dll(32位)和dart_mssql_64.dll(64位)是驱动程序的编译版本。根据您的需求重命名为dart_mssql.dll,并将其复制到项目的主目录中。

示例用法

以下是一个执行原始SQL查询的演示代码:

import 'dart:io';
import 'package:dart_mssql/dart_mssql.dart';

void main() async {
  // 建立数据库连接
  SqlConnection connection = SqlConnection(
    host: "SERVERNAME",
    db: "DBNAME",
    user: "USERNAME",
    password: "PASSWORD",
  );

  // 执行SQL查询
  String cmd = "select email from usuario where id_usuario=?";
  SqlResult result = connection.execute(cmd, [4]);

  // 遍历查询结果
  result.rows.forEach((e) {
    print("${e.email}");
  });

  // 输出结束信息
  print("end of printing.");

  // 关闭数据库连接
  connection.close();

  // 等待用户输入
  stdin.readLineSync();
}

排错指南

问题:

指定的模块找不到。 错误:库处理失败

原因:

  • 未安装Microsoft OLE DB驱动程序。
  • 未将dart_mssql.dll文件放入项目的主目录。
  • 未安装Microsoft Visual C++ Redistributable。

解决方案:

dart_mssql.dll文件复制到项目的主目录中。


问题:

%1 不是有效的Win32应用程序。 错误:库处理失败

原因:

dart_mssql.dll版本不正确(32位与64位不匹配)。

解决方案:

将正确的dart_mssql.dll文件复制到项目的主目录中。


使用Microsoft Visual Studio 2017 Community Edition编译

如果您需要编译库源代码(C++部分),请按照以下步骤操作:

  1. 在Microsoft Visual Studio 2017 Community Edition中安装Windows 10 SDK。
  2. 使用Visual Studio打开解决方案文件dart_mssql\cpp\dart_mssql.sln
  3. 在“解决方案资源管理器”面板中,右键单击dart_mssql项目并选择“重新生成”。
  4. 将生成的dart_mssql.dll文件放入项目的主文件夹中(与pubspec.yaml文件相同的目录)。
  5. 确保VC++目录中的库目录包含正确的dart-sdk\bin路径(32位或64位)。例如,将F:\DartSDK64\dart-sdk\bin更改为您的实际位置。
  6. 确保链接器输入中的附加依赖项包含正确的dart.lib版本(32位或64位)。例如,将F:\DartSDK64\dart-sdk\bin\dart.lib更改为您的实际位置。

示例代码详解

以下是完整的示例代码,展示了如何使用dart_mssql进行数据库操作:

import 'dart:io';
import 'package:dart_mssql/dart_mssql.dart';

// 客户端类(用于ORM示例)
class Client {
  int client_id;
  String client_name;
  List<Invoice> invoices;

  Client.fromJson(Map<String, dynamic> json) {
    client_id = json['client_id'];
    client_name = json['client_name'];
  }

  Map<String, dynamic> toJson() {
    return {
      'client_id': client_id,
      'client_name': client_name,
    };
  }
}

// 发票类(用于ORM示例)
class Invoice {
  int client_id;
  int inv_number;

  Invoice.fromJson(Map<String, dynamic> json) {
    client_id = json['client_id'];
    inv_number = json['inv_number'];
  }

  Map<String, dynamic> toJson() {
    return {
      'client_id': client_id,
      'inv_number': inv_number,
    };
  }
}

void main() {
  // 建立数据库连接
  SqlConnection connection = SqlConnection(
    host: "SERVERNAME",
    db: "DBNAME",
    user: "USERNAME",
    password: "PASSWORD",
  );

  // 查询多行数据
  String cmd = "select id_nacionalidade, nom_nacionalidade from nacionalidade where id_nacionalidade > ?";
  SqlResult result = connection.execute(cmd, [4]);
  result.rows.forEach((e) {
    print("${e.id_nacionalidade}");
  });

  // 查询单行数据
  cmd = "select id_nacionalidade, nom_nacionalidade from nacionalidade where id_nacionalidade = ?";
  dynamic row = connection.selectOne(cmd, [4]); // 动态变量很重要
  print(row.id_nacionalidade); // 允许通过字段名访问

  // 插入数据
  cmd = "insert into nacionalidade(id_nacionalidade, nom_nacionalidade) values (1, 'Brasileira')";
  connection.execute(cmd);

  // 更新数据
  cmd = "update nacionalidade set nom_nacionalidade = 'Argentina' where id_nacionalidade = 1";
  connection.execute(cmd);

  // 删除数据
  cmd = "delete from nacionalidade where id_nacionalidade = 1";
  connection.execute(cmd);

  // 插入数据(ORM风格)
  connection.insert("nacionalidade", {"id_nacionalidade": 1, "nom_nacionalidade": "Brasileira"});

  // 更新数据(ORM风格)
  connection.update("nacionalidade", {"nom_nacionalidade": "Argentina"}, "id_nacionalidade = ?", [1]);

  // 删除数据(ORM风格)
  connection.delete("nacionalidade", "id_nacionalidade = ?", [1]);

  // 示例:主从表查询(ORM风格)
  SqlResult master = connection.execute("select client_id, client_name from client");
  SqlResult detail = connection.execute("select client_id, inv_number from invoice");
  master.rows.forEach((r) {
    Client client = Client.fromJson(r.toJson());
    client.invoices = detail.rows
        .where((e) => e.client_id == client.client_id)
        .map((e) => Invoice.fromJson(e.toJson()))
        .toList();
  });

  // 输出结束信息
  print("end of printing.");

  // 关闭数据库连接
  connection.close();

  // 等待用户输入
  stdin.readLineSync();
}

更多关于Flutter数据库连接插件dart_mssql的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据库连接插件dart_mssql的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


dart_mssql 是一个用于在 Flutter 应用中连接和操作 Microsoft SQL Server 数据库的插件。它允许你执行 SQL 查询、插入、更新和删除操作。以下是如何在 Flutter 项目中使用 dart_mssql 插件的步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 dart_mssql 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  dart_mssql: ^0.0.1  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 dart_mssql 插件。

import 'package:dart_mssql/dart_mssql.dart';

3. 创建数据库连接

使用 MSSQL 类来创建与 SQL Server 数据库的连接。

void connectToDatabase() async {
  var mssql = MSSQL(
    host: 'your_host',       // 数据库主机地址
    port: 1433,              // 数据库端口,默认是1433
    database: 'your_db',     // 数据库名称
    user: 'your_user',       // 数据库用户名
    password: 'your_password', // 数据库密码
  );

  try {
    await mssql.connect();
    print('Connected to the database');
  } catch (e) {
    print('Failed to connect to the database: $e');
  }
}

4. 执行 SQL 查询

你可以使用 query 方法来执行 SQL 查询。

void fetchData() async {
  var mssql = MSSQL(
    host: 'your_host',
    port: 1433,
    database: 'your_db',
    user: 'your_user',
    password: 'your_password',
  );

  try {
    await mssql.connect();
    var result = await mssql.query('SELECT * FROM your_table');
    print('Query result: $result');
  } catch (e) {
    print('Failed to execute query: $e');
  } finally {
    await mssql.close();
  }
}

5. 执行插入、更新和删除操作

你可以使用 execute 方法来执行插入、更新和删除操作。

void insertData() async {
  var mssql = MSSQL(
    host: 'your_host',
    port: 1433,
    database: 'your_db',
    user: 'your_user',
    password: 'your_password',
  );

  try {
    await mssql.connect();
    await mssql.execute('INSERT INTO your_table (column1, column2) VALUES (?, ?)', ['value1', 'value2']);
    print('Data inserted successfully');
  } catch (e) {
    print('Failed to insert data: $e');
  } finally {
    await mssql.close();
  }
}

6. 关闭连接

在完成数据库操作后,记得关闭连接以释放资源。

await mssql.close();

7. 处理异常

在使用 dart_mssql 时,确保处理可能的异常,例如连接失败、查询失败等。

8. 示例代码

以下是一个完整的示例代码,展示了如何连接数据库、执行查询和插入操作。

import 'package:dart_mssql/dart_mssql.dart';

void main() async {
  await connectAndQuery();
}

Future<void> connectAndQuery() async {
  var mssql = MSSQL(
    host: 'your_host',
    port: 1433,
    database: 'your_db',
    user: 'your_user',
    password: 'your_password',
  );

  try {
    await mssql.connect();
    print('Connected to the database');

    // 查询数据
    var result = await mssql.query('SELECT * FROM your_table');
    print('Query result: $result');

    // 插入数据
    await mssql.execute('INSERT INTO your_table (column1, column2) VALUES (?, ?)', ['value1', 'value2']);
    print('Data inserted successfully');
  } catch (e) {
    print('Error: $e');
  } finally {
    await mssql.close();
    print('Connection closed');
  }
}
回到顶部