rust如何操作sqlserver
rust中操作mysql和pgsql的技术非常多,也很成熟。但是操作mssql的办法,确实不多。作为一个sql server多年的使用者,我总不能用rust之后,就放弃mssql吧。
我尝试了一下,我们国人开发的rbatis,rbatis是支持mssql的。但是很遗憾,我使用的是兼容win7的rust 1.77.2这个版本,rbatis在这个环境并没有跑起来。
我找到了tiberius,这个库是可以用的。但是这个库只有339星,热度非常低,我们来看看,如何使用tiberius。
我们来看一个完整的示例,从mssql中取数据库中所有的表和视图名称:
// 配置连接设置
let mut config = Config::new();
config.host(params.host); // 替换为你的 SQL Server 的 IP 地址或主机名
config.database(params.database);
config.port(params.port); // SQL Server 的默认端口
config.authentication(AuthMethod::sql_server(params.user, params.password)); // 替换为你的用户名和密码
config.trust_cert();
// 连接到 SQL Server
let tcp = TcpStream::connect(config.get_addr()).await.map_err(|e| {
//debug!("无法连接到mssql {}", e);
ApiError::InternalError(format!("无法连接到mssql: {}", e))
})?;
tcp.set_nodelay(true).map_err(|e| {
//debug!("无法连接到mssql_1 {}", e);
ApiError::InternalError(format!("无法连接到mssql_1: {}", e))
})?;
let mut client = Client::connect(config, tcp.compat_write())
.await
.map_err(|e| {
//debug!("无法连接到mssql_2 {}", e);
ApiError::InternalError(format!("无法连接到mssql_2: {}", e))
})?;
let sql = "SELECT TABLE_NAME AS table_name, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' OR TABLE_TYPE = 'VIEW'
ORDER BY TABLE_NAME;";
let mut stream = client
.query(sql, &[])
.await
.map_err(|_| ApiError::InternalError("数据查询失败".to_string()))?;
let rows = stream
.into_results()
.await
.map_err(|_| ApiError::InternalError("数据查询失败".to_string()))?;
let json_results =
rows_to_json_mssql(rows).map_err(|_| ApiError::InternalError("转换失败".to_string()))?;
经过测试,并没有发现tiberius有什么问题,你可以愉快地用它来操作sql server。当然我有批量插入数据到mssql的需求,tiberius并不能满足,所以我后面用了替代的办法。
代码取自hpctb