Skip to main content

Crate mssql_tds

Crate mssql_tds 

Source
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

FlagDefaultDescription
integrated-authyesEnables both sspi and gssapi
sspivia integrated-authWindows SSPI (Kerberos/NTLM)
gssapivia integrated-authUnix 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

Modules§

connection
Connection management types for TDS protocol communication with SQL Server.
connection_provider
Connection provider factory for creating TdsClient instances.
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.