#![allow(clippy::unwrap_used, clippy::expect_used)]
use mssql_client::{Client, Config, Error};
#[tokio::main]
async fn main() -> Result<(), Error> {
tracing_subscriber::fmt::init();
let host = std::env::var("MSSQL_HOST").unwrap_or_else(|_| "localhost".into());
let database = std::env::var("MSSQL_DATABASE").unwrap_or_else(|_| "master".into());
let user = std::env::var("MSSQL_USER").unwrap_or_else(|_| "sa".into());
let password = std::env::var("MSSQL_PASSWORD").unwrap_or_else(|_| "Password123!".into());
let encrypt = std::env::var("MSSQL_ENCRYPT").unwrap_or_else(|_| "true".into());
let conn_str = format!(
"Server={host};Database={database};User Id={user};Password={password};TrustServerCertificate=true;Encrypt={encrypt}"
);
let config = Config::from_connection_string(&conn_str)?;
println!("Connecting to SQL Server at {host}...");
let mut client = Client::connect(config).await?;
println!("Connected successfully!");
let rows = client.query("SELECT @@VERSION AS version", &[]).await?;
for result in rows {
let row = result?;
let version: String = row.get(0)?;
println!("SQL Server Version: {version}");
}
println!("\nExecuting parameterized statement...");
let user_id = 1i32;
let rows_affected = client
.execute(
"SELECT @p1 AS input_value, GETDATE() AS query_time",
&[&user_id],
)
.await?;
println!("Rows affected: {rows_affected}");
let name = "test";
let count = 42i32;
let rows = client
.query("SELECT @p1 AS name, @p2 AS count", &[&name, &count])
.await?;
for result in rows {
let row = result?;
let n: String = row.get(0)?;
let c: i32 = row.get(1)?;
println!("Name: {n}, Count: {c}");
}
client.close().await?;
println!("\nConnection closed.");
Ok(())
}