Crate tiberius[][src]

A pure-rust TDS implementation for Microsoft SQL Server (>=2008)

A simple example

Warning: Do not use simple_query with user-specified data. Resort to prepared statements for that.

extern crate futures;
extern crate futures_state_stream;
extern crate tokio;
extern crate tiberius;
use futures::Future;
use futures_state_stream::StateStream;
use tokio::executor::current_thread;
use tiberius::SqlConnection;

fn main() {
 
   // 1: for windows we demonstrate the hardcoded variant
   // which is equivalent to:
   //     let conn_str = "server=tcp:localhost,1433;integratedSecurity=true;";
   //     let future = SqlConnection::connect(conn_str).and_then(|conn| {
   // and for linux we use the connection string from an environment variable
   let conn_str = if cfg!(windows) {
       "server=tcp:localhost,1433;integratedSecurity=true;".to_owned()
   } else {
       ::std::env::var("TIBERIUS_TEST_CONNECTION_STRING").unwrap()
   };

   let future = SqlConnection::connect(conn_str.as_str())
       .and_then(|conn| {
           conn.simple_query("SELECT 1+2").for_each(|row| {
               let val: i32 = row.get(0);
               assert_eq!(val, 3i32);
               Ok(())
           })
       })
       .and_then(|conn| conn.simple_exec("create table #Temp(gg int);"))
       .and_then(|(_, conn)| conn.simple_exec("UPDATE #Temp SET gg=1 WHERE gg=1"));
 
   current_thread::block_on_all(future).unwrap();
}

Prepared Statements

Parameters use numeric indexes such as @P1, @P2 for the n-th parameter (starting with 1 for the first)

extern crate futures;
extern crate futures_state_stream;
extern crate tokio;
extern crate tiberius;
use futures::Future;
use futures_state_stream::StateStream;
use tokio::executor::current_thread;
use tiberius::SqlConnection;

fn main() {
 
   // 1: Same as in the example above
   let conn_str = if cfg!(windows) {
       "server=tcp:localhost,1433;integratedSecurity=true;".to_owned()
   } else {
       ::std::env::var("TIBERIUS_TEST_CONNECTION_STRING").unwrap()
   };

   let future = SqlConnection::connect(conn_str.as_str()).and_then(|conn| {
       conn.query("SELECT x FROM (VALUES (1),(2),(3),(4)) numbers(x) WHERE x%@P1=@P2",
           &[&2i32, &0i32]).for_each(|row| {
           let val: i32 = row.get(0);
           assert_eq!(val % 2, 0i32);
           Ok(())
       })
   });
   current_thread::block_on_all(future).unwrap();
}

If you intend to execute the same statement multiple times for the same connection, you should use .prepare. For most cases you'll want this though.

Modules

query

Query results and resultsets

stmt

Prepared statements

ty

Exported Datatypes (Dates, GUID, ...)

Structs

ConnectParams

Settings for the connection, everything that isn't IO/transport specific (e.g. authentication)

SqlConnection

A connection to a SQL server with an underlying IO (e.g. socket)

Transaction

A transaction

Enums

AuthMethod

The authentication method that should be used during authentication

EncryptionLevel

The configured encryption level specifying if encryption is required

Error

A unified error enum that contains several errors that might occurr during the lifecycle of this driver

Traits

BoxableIo

A variant of Io which can be boxed to allow dynamic dispatch

StmtResult

A type which is constructable from a statement as a statement's result

Type Definitions

Result