ODBC wrapper for safe idiomatic Rust
Library for writing ODBC applications in Rust.
If you're looking for raw ODBC FFI bindings check odbc-sys crate.
Docs are also available here
extern crate odbc;
extern crate env_logger;
use odbc::*;
use std::io;
fn main() {
env_logger::init().unwrap();
match connect() {
Ok(()) => println!("Success"),
Err(diag) => println!("Error: {}", diag),
}
}
fn connect() -> std::result::Result<(), DiagnosticRecord> {
let env = Environment::new().unwrap();
let env3 = env.set_odbc_version_3()?;
let conn = DataSource::with_parent(&env3)?;
let mut buffer = String::new();
println!("Please enter connection string: ");
io::stdin().read_line(&mut buffer).unwrap();
let mut conn = conn.connect_with_connection_string(&buffer)?;
execute_statement(&mut conn)
}
fn execute_statement(mut conn: &mut DataSource<Connected>) -> Result<()> {
let stmt = Statement::with_parent(&mut conn)?;
let mut sql_text = String::new();
println!("Please enter SQL statement string: ");
io::stdin().read_line(&mut sql_text).unwrap();
match stmt.exec_direct(&sql_text)?{
Data(mut stmt) =>{
let cols = stmt.num_result_cols()?;
while let Some(mut cursor) = stmt.fetch()? {
for i in 1..(cols + 1) {
match cursor.get_data::<String>(i as u16)? {
Some(val) => print!(" {}", val),
None => print!(" NULL"),
}
}
println!("");
}
}
NoData(_) => println!("Query executed, no data returned")
}
Ok(())
}