pub struct DataSource<'env, S: HDbcWrapper<'env> = Unconnected<'env>> { /* private fields */ }Expand description
A DataSource is used to query and manipulate a data source.
- The state of the connection
- The current connection-level diagnostics
- The handles of statements and descriptors currently allocated on the connection
- The current settings of each connection attribute
§States
A DataSource is in one of two states Connected or Unconnected. These are modeled in the
type at compile time. Every new DataSource starts out as Unconnected. To execute a query it
needs to be Connected. You can achieve this by calling e.g. connect and capture the result
in a new binding which will be of type DataSource::<'env, Connected<'env>>.
See [Connection Handles in the ODBC Reference][1] [1]: https://docs.microsoft.com/sql/odbc/reference/develop-app/connection-handles
Implementations§
Source§impl<'env, Any> DataSource<'env, Any>where
Any: HDbcWrapper<'env>,
impl<'env, Any> DataSource<'env, Any>where
Any: HDbcWrapper<'env>,
Source§impl<'env> DataSource<'env, Unconnected<'env>>
impl<'env> DataSource<'env, Unconnected<'env>>
Sourcepub fn with_parent<V>(parent: &'env Environment<V>) -> Return<Self>where
V: Version,
pub fn with_parent<V>(parent: &'env Environment<V>) -> Return<Self>where
V: Version,
Allocates a new DataSource. A DataSource may not outlive its parent Environment.
See [Allocating a Connection Handle ODBC][1] [1]: https://docs.microsoft.com/sql/odbc/reference/develop-app/allocating-a-connection-handle-odbc
Examples found in repository?
More examples
5fn main() {
6 let env = Environment::new().unwrap();
7 let env = env.declare_version_3().unwrap();
8
9 let ds = DataSource::with_parent(&env).unwrap();
10 let conn = ds.connect("TestDataSource", "", "").unwrap();
11 let mut conn = conn.disable_autocommit().unwrap();
12
13 {
14 //Any statement now will start transaction which could be ended with conn.commit() or conn.rollback()
15 //If either commit or rollback was not called before connection drop automatic rollback will be issued
16 let stmt = Statement::with_parent(&conn).unwrap();
17 let res = stmt.exec_direct("SELECT 'HELLO' FROM MOVIES");
18 println!("Result {:?}", res);
19 }
20
21 let end_tx_result = conn.commit();
22
23 println!("End TX result {:?}", end_tx_result);
24}Sourcepub fn connect<DSN, U, P>(
self,
data_source_name: &DSN,
user: &U,
pwd: &P,
) -> Return<Connection<'env, AutocommitOn>, DataSource<'env, Unconnected<'env>>>
pub fn connect<DSN, U, P>( self, data_source_name: &DSN, user: &U, pwd: &P, ) -> Return<Connection<'env, AutocommitOn>, DataSource<'env, Unconnected<'env>>>
Establishes connections to a driver and a data source. The connection handle references storage of all information about the connection to the data source, including status, transaction state, and error information.
- See [Connecting with SQLConnect][1]
- See [SQLConnectFunction][2]
§State transition
On success this method changes the Connection handles state from Allocated to Connected
. Since this state change is expressed in the type system, the method consumes self. And
returns a new instance in the result type.
§Arguments
data_source_name- Data source name. The data might be located on the same computer as the program, or on another computer somewhere on a network.user- User identifier.pwd- Authenticatien string (typically the password). [1]: https://docs.microsoft.com/sql/odbc/reference/syntax/sqlconnect-function [2]: https://docs.microsoft.com/sql/odbc/reference/syntax/sqlconnect-function
Examples found in repository?
More examples
5fn main() {
6 let env = Environment::new().unwrap();
7 let env = env.declare_version_3().unwrap();
8
9 let ds = DataSource::with_parent(&env).unwrap();
10 let conn = ds.connect("TestDataSource", "", "").unwrap();
11 let mut conn = conn.disable_autocommit().unwrap();
12
13 {
14 //Any statement now will start transaction which could be ended with conn.commit() or conn.rollback()
15 //If either commit or rollback was not called before connection drop automatic rollback will be issued
16 let stmt = Statement::with_parent(&conn).unwrap();
17 let res = stmt.exec_direct("SELECT 'HELLO' FROM MOVIES");
18 println!("Result {:?}", res);
19 }
20
21 let end_tx_result = conn.commit();
22
23 println!("End TX result {:?}", end_tx_result);
24}Sourcepub fn connect_with_connection_string<C>(
self,
connection_string: &C,
) -> Return<Connection<'env, AutocommitOn>, Self>
pub fn connect_with_connection_string<C>( self, connection_string: &C, ) -> Return<Connection<'env, AutocommitOn>, Self>
Connects to a data source using a connection string.
For the syntax regarding the connections string see [SQLDriverConnect][1]. This method is
equivalent of calling odbc_sys::SQLDriverConnect with the SQL_DRIVER_NOPROMPT parameter.
See [Choosing a Data Source or Driver][2] [1]: https://docs.microsoft.com/sql/odbc/reference/syntax/sqldriverconnect-function [2]: https://docs.microsoft.com/sql/odbc/reference/develop-app/choosing-a-data-source-or-driver
Source§impl<'env, AC: AutocommitMode> DataSource<'env, Connected<'env, AC>>
impl<'env, AC: AutocommitMode> DataSource<'env, Connected<'env, AC>>
Sourcepub fn disconnect(
self,
) -> Return<DataSource<'env, Unconnected<'env>>, Connection<'env, AC>>
pub fn disconnect( self, ) -> Return<DataSource<'env, Unconnected<'env>>, Connection<'env, AC>>
When an application has finished using a data source, it calls disconnect. disconnect
disconnects the driver from the data source.
- See [Disconnecting from a Data Source or Driver][1]
- See [SQLDisconnect Function][2] [1]: https://docs.microsoft.com/sql/odbc/reference/develop-app/disconnecting-from-a-data-source-or-driver [2]: https://docs.microsoft.com/sql/odbc/reference/syntax/sqldisconnect-function
Sourcepub fn is_read_only(&mut self) -> Return<bool>
pub fn is_read_only(&mut self) -> Return<bool>
true if the data source is set to READ ONLY mode, false otherwise.
Source§impl<'env> DataSource<'env, Connected<'env, AutocommitOff>>
impl<'env> DataSource<'env, Connected<'env, AutocommitOff>>
Sourcepub fn enable_autocommit(self) -> Return<Connection<'env, AutocommitOn>, Self>
pub fn enable_autocommit(self) -> Return<Connection<'env, AutocommitOn>, Self>
Set autocommit mode on, per ODBC spec triggers implicit commit of any running transaction
Sourcepub fn commit(&mut self) -> Return<()>
pub fn commit(&mut self) -> Return<()>
Commit transaction if any, can be safely called and will be no-op if no transaction present or autocommit mode is enabled
Examples found in repository?
5fn main() {
6 let env = Environment::new().unwrap();
7 let env = env.declare_version_3().unwrap();
8
9 let ds = DataSource::with_parent(&env).unwrap();
10 let conn = ds.connect("TestDataSource", "", "").unwrap();
11 let mut conn = conn.disable_autocommit().unwrap();
12
13 {
14 //Any statement now will start transaction which could be ended with conn.commit() or conn.rollback()
15 //If either commit or rollback was not called before connection drop automatic rollback will be issued
16 let stmt = Statement::with_parent(&conn).unwrap();
17 let res = stmt.exec_direct("SELECT 'HELLO' FROM MOVIES");
18 println!("Result {:?}", res);
19 }
20
21 let end_tx_result = conn.commit();
22
23 println!("End TX result {:?}", end_tx_result);
24}Source§impl<'env> DataSource<'env, Connected<'env, AutocommitOn>>
impl<'env> DataSource<'env, Connected<'env, AutocommitOn>>
Sourcepub fn disable_autocommit(self) -> Return<Connection<'env, AutocommitOff>, Self>
pub fn disable_autocommit(self) -> Return<Connection<'env, AutocommitOff>, Self>
Set autocommit mode off
Examples found in repository?
5fn main() {
6 let env = Environment::new().unwrap();
7 let env = env.declare_version_3().unwrap();
8
9 let ds = DataSource::with_parent(&env).unwrap();
10 let conn = ds.connect("TestDataSource", "", "").unwrap();
11 let mut conn = conn.disable_autocommit().unwrap();
12
13 {
14 //Any statement now will start transaction which could be ended with conn.commit() or conn.rollback()
15 //If either commit or rollback was not called before connection drop automatic rollback will be issued
16 let stmt = Statement::with_parent(&conn).unwrap();
17 let res = stmt.exec_direct("SELECT 'HELLO' FROM MOVIES");
18 println!("Result {:?}", res);
19 }
20
21 let end_tx_result = conn.commit();
22
23 println!("End TX result {:?}", end_tx_result);
24}