db.mssql #
SQL Server ODBC
- This is a V wrapper of SQL Server ODBC C/C++ library
Dependencies
- ODBC C/C++ library
- Linux Install:
- Details: https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server
msodbcsql17
andunixodbc-dev
packages are needed- Windows Install:
odbc
lib is included in windows sdk for most of distributions,so there is no need to install it separately* Details: https://docs.microsoft.com/en-us/sql/connect/odbc/microsoft-odbc-driver-for-sql-server
Windows Notes
Using msvc
- Make sure
cl.exe
ofmsvc
is accessible from command line.You can runv
commands inVisual Studio 2019 Developer Command Prompt
to be safe.* C Headers and dlls can be automatically resolved bymsvc
.
Using tcc
- Copy those headers to
@VEXEROOT\thirdparty\mssql\include
.The version number10.0.18362.0
might differ on your system. Command Prompt commands:
copy "C:\P'C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0 l.h' thirdparty
- dlls can be automatically resolved by
tcc
TODO
- Support Mac
- Support ORM
Usage
import mssql
fn test_example() ? {
// connect to server
config := mssql.Config{
driver: 'ODBC Driver 17 for SQL Server'
server: 'tcp:localhost'
uid: '<your username>'
pwd: '<your password>'
}
mut conn := mssql.Connection{}
conn.connect(config.get_conn_str())?
defer {
conn.close()
}
// get current db name
mut query := 'SELECT DB_NAME()'
mut res := conn.query(query)?
assert res == mssql.Result{
rows: [mssql.Row{
vals: ['master']
}]
num_rows_affected: -1
}
}
struct Config #
struct Config {
pub:
driver string
server string
uid string
pwd string
// if dbname empty, conn str will not contain Database info,
// and it is up to the server to choose which db to connect to.
dbname string
}
Config TODO
fn (Config) get_conn_str #
fn (cfg Config) get_conn_str() string
get_conn_str TODO
struct Connection #
struct Connection {
mut:
henv C.SQLHENV = C.SQLHENV(C.SQL_NULL_HENV) // Environment
hdbc C.SQLHDBC = C.SQLHDBC(C.SQL_NULL_HDBC) // Connection handle
pub mut:
conn_str string
}
fn (Connection) connect #
fn (mut conn Connection) connect(conn_str string) !bool
connect to db
fn (Connection) close #
fn (mut conn Connection) close()
close - closes the connection.
fn (Connection) query #
fn (mut conn Connection) query(q string) !Result
query executes a sql query
struct Result #
struct Result {
pub mut:
rows []Row
// the number of rows affected by sql statement
num_rows_affected int
}
struct Row #
struct Row {
pub mut:
vals []string
}