39 releases

new 0.12.0 Apr 15, 2019
0.10.2 Feb 28, 2019
0.9.15 Dec 21, 2018
0.9.12 Nov 28, 2018
0.1.0 Feb 19, 2016

#21 in Database interfaces

Download history 74/week @ 2018-12-31 220/week @ 2019-01-07 263/week @ 2019-01-14 320/week @ 2019-01-21 235/week @ 2019-01-28 185/week @ 2019-02-04 120/week @ 2019-02-11 122/week @ 2019-02-18 143/week @ 2019-02-25 149/week @ 2019-03-04 106/week @ 2019-03-11 73/week @ 2019-03-18 668/week @ 2019-03-25 224/week @ 2019-04-01 137/week @ 2019-04-08

901 downloads per month
Used in 1 crate

MIT license

77KB
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

~185KB