list_datasources/
list_datasources.rs

1//! Prints all datasources to the standard out.
2extern crate odbc_safe;
3extern crate odbc_sys;
4use odbc_safe::*;
5use odbc_sys::*;
6use std::str::from_utf8;
7
8fn main() {
9
10    let env = Environment::new().unwrap();
11    let mut env = env.declare_version_3().unwrap();
12
13    let mut server_name = [0; 512];
14    let mut description = [0; 512];
15
16    println!("ODBC Data Sources:");
17
18    loop {
19        let (name_length, description_length) =
20            match env.data_sources(SQL_FETCH_NEXT, &mut server_name, &mut description) {
21                ReturnOption::Success(v) => v,
22                ReturnOption::Info(_) => panic!("Buffers not large enough. Truncation occurred."),
23                ReturnOption::NoData(()) => break,
24                ReturnOption::Error(()) => {
25                    panic!("Error occurred. Could use diagnostics to learn more")
26                }
27            };
28
29        println!(
30            "\tName: {}\n\tDescription: {}\n",
31            from_utf8(&server_name[..(name_length as usize)]).unwrap(),
32            from_utf8(&description[..(description_length as usize)]).unwrap()
33        );
34    }
35}