Expand description
Async Rust implementation of the TDS (Tabular Data Stream) protocol for SQL Server and Azure SQL Database.
§Overview
mssql-tds provides a low-level, async client for communicating with SQL Server
using the TDS protocol. It handles connection negotiation (prelogin, TLS, login7),
query execution, result set streaming, bulk copy, RPC calls, and transaction
management.
§Feature flags
| Flag | Default | Description |
|---|---|---|
integrated-auth | yes | Enables both sspi and gssapi |
sspi | via integrated-auth | Windows SSPI (Kerberos/NTLM) |
gssapi | via integrated-auth | Unix GSSAPI (Kerberos) via runtime dlopen |
Disable the default to drop platform-specific auth dependencies:
mssql-tds = { version = "0.1", default-features = false }§Quick start
use mssql_tds::connection::client_context::ClientContext;
use mssql_tds::connection::tds_client::ResultSetClient;
use mssql_tds::connection_provider::tds_connection_provider::TdsConnectionProvider;
use mssql_tds::core::TdsResult;
#[tokio::main]
async fn main() -> TdsResult<()> {
let mut context = ClientContext::default();
context.user_name = std::env::var("DB_USER").unwrap_or("<user>".into());
context.password = std::env::var("DB_PASSWORD").unwrap_or("<password>".into());
context.database = "master".into();
let provider = TdsConnectionProvider {};
let mut client = provider
.create_client(context, "tcp:localhost,1433", None)
.await?;
client
.execute("SELECT 1 AS value".into(), None, None)
.await?;
if let Some(rs) = client.get_current_resultset() {
while let Some(row) = rs.next_row().await? {
println!("{row:?}");
}
}
client.close_query().await?;
Ok(())
}§Modules
connection— Client type (connection::tds_client::TdsClient), connection context, and authentication configuration.connection_provider— Connection factory (connection_provider::tds_connection_provider::TdsConnectionProvider).core— Shared types:core::TdsResult,core::EncryptionOptions,core::CancelHandle.cursor— Cursor types, bitflags, and response structs forsp_cursor*RPCs.datatypes— SQL Server data types and column value representations.error— Error definitions.message— TDS message types (prelogin, login7, etc.).query— Query metadata and column descriptors.token— TDS token stream parsing (COLMETADATA, ROW, DONE, etc.).
Modules§
- connection
- Connection management types for TDS protocol communication with SQL Server.
- connection_
provider - Connection provider factory for creating
TdsClientinstances. - core
- Shared types: result aliases, encryption settings, and cancellation.
- cursor
- Cursor types and response structures for TDS cursor RPCs. Cursor types and response structures for TDS cursor RPCs.
- datatypes
- TDS data type definitions and serialization.
- error
- Error definitions for TDS operations.
- message
- TDS protocol message types.
- query
- Result set reading and row iteration.
- security
- Security module for integrated authentication support.
- token
- TDS token types, parsers, and related data structures.