39 releases (13 breaking)

0.14.0 Jul 11, 2019
0.12.0 Apr 15, 2019
0.10.2 Feb 28, 2019
0.9.15 Dec 21, 2018
0.1.0 Feb 19, 2016

#23 in Database interfaces

Download history 187/week @ 2019-03-28 182/week @ 2019-04-04 207/week @ 2019-04-11 118/week @ 2019-04-18 160/week @ 2019-04-25 100/week @ 2019-05-02 147/week @ 2019-05-09 127/week @ 2019-05-16 131/week @ 2019-05-23 158/week @ 2019-05-30 211/week @ 2019-06-06 98/week @ 2019-06-13 247/week @ 2019-06-20 422/week @ 2019-06-27 405/week @ 2019-07-04

826 downloads per month
Used in 4 crates (2 directly)

MIT license

80KB
1.5K SLoC

ODBC wrapper for safe idiomatic Rust

Library for writing ODBC applications in Rust.

If you're looking for raw ODBC FFI bindings check odbc-safe and odbc-sys crate.

https://travis-ci.org/Koka/odbc-rs Build status https://crates.io/crates/odbc Coverage Status Docs Join the chat at https://gitter.im/odbc-rs/odbc

Docs are also available here

extern crate odbc;
// Use this crate and set environmet variable RUST_LOG=odbc to see ODBC warnings
extern crate env_logger;
use odbc::*;
use std::io;

fn main() {

    env_logger::init();

    match connect() {
        Ok(()) => println!("Success"),
        Err(diag) => println!("Error: {}", diag),
    }
}

fn connect() -> std::result::Result<(), DiagnosticRecord> {

    let env = create_environment_v3().map_err(|e| e.unwrap())?;

    let mut buffer = String::new();
    println!("Please enter connection string: ");
    io::stdin().read_line(&mut buffer).unwrap();

    let conn = env.connect_with_connection_string(&buffer)?;
    execute_statement(&conn)
}

fn execute_statement<'env>(conn: &Connection<'env>) -> Result<()> {
    let stmt = Statement::with_parent(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::<&str>(i as u16)? {
                        Some(val) => print!(" {}", val),
                        None => print!(" NULL"),
                    }
                }
                println!("");
            }
        }
        NoData(_) => println!("Query executed, no data returned"),
    }

    Ok(())
}

Dependencies

~3.5MB
~129K SLoC