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++部分),请按照以下步骤操作:
- 在Microsoft Visual Studio 2017 Community Edition中安装Windows 10 SDK。
- 使用Visual Studio打开解决方案文件
dart_mssql\cpp\dart_mssql.sln
。 - 在“解决方案资源管理器”面板中,右键单击
dart_mssql
项目并选择“重新生成”。 - 将生成的
dart_mssql.dll
文件放入项目的主文件夹中(与pubspec.yaml
文件相同的目录)。 - 确保VC++目录中的库目录包含正确的
dart-sdk\bin
路径(32位或64位)。例如,将F:\DartSDK64\dart-sdk\bin
更改为您的实际位置。 - 确保链接器输入中的附加依赖项包含正确的
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
更多关于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');
}
}