---
title: "Getting Started with sqlserverconnect"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Getting Started with sqlserverconnect}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)
```

## Overview

`sqlserverconnect` provides a minimal wrapper around **DBI**, **odbc**, and **pool** to make connecting to Microsoft SQL Server as painless as possible. The package exports three functions:
 
- `db_connect()` – open a DBI connection or a connection pool
- `db_disconnect()` – safely close either one
- `db_connection_args()` – build the connection arguments list without actually connecting (useful for debugging)

## Windows Authentication (trusted connection)

This is the most common setup in corporate environments. Windows passes your credentials automatically, so you don't need to supply a username or password. Just set `trusted = TRUE` (the default):

```{r}
library(sqlserverconnect)
library(DBI)

conn <- db_connect(
  server   = "localhost",
  database = "master"
)

DBI::dbGetQuery(conn, "SELECT TOP (5) name, create_date FROM sys.databases")

db_disconnect(conn)
```

## SQL Server Authentication (username + password)

For SQL auth, set `trusted = FALSE` and provide `uid` and `pwd`. Avoid hardcoding passwords — use environment variables, the [keyring](https://cran.r-project.org/package=keyring) package, or another secret manager.

```{r}
conn <- db_connect(
  server   = "localhost",
  database = "master",
  uid      = Sys.getenv("SQLSERVER_UID"),
  pwd      = Sys.getenv("SQLSERVER_PWD"),
  trusted  = FALSE
)

DBI::dbGetQuery(conn, "SELECT TOP (5) name FROM sys.tables")

db_disconnect(conn)
```

You can set the environment variables in your `.Renviron` file:

```
SQLSERVER_UID=my_username
SQLSERVER_PWD=my_password
```

Then restart R so they take effect.

## Inspecting connection arguments

If you want to see exactly what `db_connect()` would pass to `DBI::dbConnect()` without actually opening a connection, use `db_connection_args()`:

```{r}
args <- db_connection_args(
  server   = "localhost",
  database = "master",
  trusted  = TRUE
)

str(args)
```

This is handy for debugging driver issues or verifying your connection string.

## Custom port

SQL Server defaults to port 1433. If your instance uses a different port, pass it directly:

```{r}
conn <- db_connect(
  server   = "myserver",
  database = "mydb",
  port     = 1434
)
```

## Named instances

For named instances, include the instance name in the `server` argument:

```{r}
conn <- db_connect(
  server   = "myserver\\SQLEXPRESS",
  database = "mydb"
)
```
