diff --git a/docs/_assets/icon/csharp-logo.svg b/docs/_assets/icon/csharp-logo.svg
new file mode 100644
index 00000000..c023aa9b
--- /dev/null
+++ b/docs/_assets/icon/csharp-logo.svg
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/docs/_assets/icon/fsharp-logo.svg b/docs/_assets/icon/fsharp-logo.svg
new file mode 100644
index 00000000..8136f302
--- /dev/null
+++ b/docs/_assets/icon/fsharp-logo.svg
@@ -0,0 +1,59 @@
+
+
+
+
diff --git a/docs/_assets/icon/visualbasic-logo.svg b/docs/_assets/icon/visualbasic-logo.svg
new file mode 100644
index 00000000..81e3d1d9
--- /dev/null
+++ b/docs/_assets/icon/visualbasic-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/_include/links.md b/docs/_include/links.md
index 5c2eafeb..e0b77e65 100644
--- a/docs/_include/links.md
+++ b/docs/_include/links.md
@@ -3,6 +3,7 @@
[ADBC]: https://arrow.apache.org/docs/format/ADBC.html
[Admin UI]: inv:crate-admin-ui:*:label#index
+[ADO.NET Overview]: https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/ado-net-overview
[Amazon DynamoDB Streams]: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html
[Amazon Kinesis Data Streams]: https://docs.aws.amazon.com/streams/latest/dev/introduction.html
[Apache Airflow]: https://airflow.apache.org/
@@ -13,6 +14,7 @@
[BM25]: https://en.wikipedia.org/wiki/Okapi_BM25
[cloud-datashader-colab]: https://colab.research.google.com/github/crate/cratedb-examples/blob/amo/cloud-datashader/topic/timeseries/explore/cloud-datashader.ipynb
[cloud-datashader-github]: https://github.com/crate/cratedb-examples/blob/amo/cloud-datashader/topic/timeseries/explore/cloud-datashader.ipynb
+[Connection Strings in ADO.NET]: https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings
[CTE]: inv:crate-reference#sql_dql_with
[CrateDB BLOB support]: inv:crate-reference:*:label#blob_support
[CrateDB Cloud]: inv:cloud:*:label#index
diff --git a/docs/connect/csharp/index.md b/docs/connect/csharp/index.md
new file mode 100644
index 00000000..3328d7e5
--- /dev/null
+++ b/docs/connect/csharp/index.md
@@ -0,0 +1,108 @@
+:::{include} /_include/links.md
+:::
+
+(connect-csharp)=
+# C#
+
+:::{div} .float-right .text-right
+[](https://github.com/crate/cratedb-examples/actions/workflows/lang-csharp-npgsql.yml)
+[](https://github.com/crate/cratedb-examples/actions/workflows/lang-csharp-efcore.yml)
+:::
+:::{div} .clearfix
+:::
+
+:::{div} sd-text-muted
+Connect to CrateDB from C# .NET applications.
+:::
+
+:::{rubric} About
+:::
+
+[Npgsql] is an open source ADO\.NET Data Provider for PostgreSQL, for programs
+written in C#, F#, or Visual Basic.
+
+:::{rubric} Synopsis
+:::
+
+`example.csproj`
+```xml
+
+
+
+ Exe
+ net$(NETCoreAppMaximumVersion)
+ false
+
+
+
+
+
+
+
+```
+`example.cs`
+```c#
+using Npgsql;
+using System;
+
+// Connect to database.
+var connString = "Host=localhost;Port=5432;Username=crate;Password=crate;Database=doc;Sslmode=disable";
+var dataSourceBuilder = new NpgsqlDataSourceBuilder(connString);
+var dataSource = dataSourceBuilder.Build();
+var conn = dataSource.OpenConnection();
+
+// Invoke basic query.
+var cmd = new NpgsqlCommand("SELECT mountain, height FROM sys.summits ORDER BY height DESC LIMIT 3", conn);
+
+// Display results.
+var reader = cmd.ExecuteReader();
+while (reader.Read())
+ Console.WriteLine($"{reader.GetString(0)}: {reader.GetInt32(1)}");
+```
+
+:::{include} ../_cratedb.md
+:::
+```shell
+export DOTNET_CLI_TELEMETRY_OPTOUT=true
+dotnet run
+```
+
+:::{rubric} CrateDB Cloud
+:::
+
+For connecting to CrateDB Cloud, use `Sslmode=require`, and
+replace hostname, username, and password with values matching
+your environment.
+```c#
+var connString = "Host=testcluster.cratedb.net;Port=5432;Username=admin;Password=password;Database=doc;Sslmode=require";
+```
+
+## Examples
+
+:::{card}
+:link: https://github.com/crate/cratedb-examples/tree/main/by-language/csharp-npgsql
+:link-type: url
+{material-regular}`play_arrow;2em`
+Connect to CrateDB and CrateDB Cloud using .NET (C#)
++++
+Demonstrates a basic example using Npgsql with CrateDB.
+:::
+
+:::{card}
+:link: https://github.com/crate/cratedb-examples/tree/main/by-language/csharp-efcore
+:link-type: url
+{material-regular}`play_arrow;2em`
+Connect to CrateDB and CrateDB Cloud using the Npgsql Entity Framework
++++
+Demonstrates the Npgsql Entity Framework Core provider for PostgreSQL with CrateDB.
+:::
+
+## See also
+
+:::{div}
+- [Connection Strings in ADO.NET]
+- [ADO.NET Overview]
+:::
+
+
+[Npgsql]: https://www.npgsql.org/
diff --git a/docs/connect/fsharp/index.md b/docs/connect/fsharp/index.md
new file mode 100644
index 00000000..c7ff2b87
--- /dev/null
+++ b/docs/connect/fsharp/index.md
@@ -0,0 +1,104 @@
+:::{include} /_include/links.md
+:::
+
+(connect-fsharp)=
+# F#
+
+:::{div} sd-text-muted
+Connect to CrateDB from F# .NET applications.
+:::
+
+:::{rubric} About
+:::
+
+[Npgsql] is an open source ADO\.NET Data Provider for PostgreSQL, for programs
+written in C#, F#, or Visual Basic.
+[Npgsql.FSharp] is a thin F#-friendly layer around it.
+
+:::{rubric} Synopsis
+:::
+
+`example.fsproj`
+```xml
+
+
+
+ Exe
+ net$(NETCoreAppMaximumVersion)
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+```
+`example.fs`
+```f#
+open Npgsql.FSharp
+open System
+
+let connString = "postgres://crate:crate@localhost:5432/doc?sslmode=disable";
+
+type Record = {
+ mountain: string
+ height: int
+}
+
+[]
+let main args =
+ let results = ResizeArray()
+
+ // Connect to database.
+ connString
+ |> Sql.connect
+
+ // Invoke basic query.
+ |> Sql.query "SELECT mountain, height FROM sys.summits ORDER BY height DESC LIMIT 3"
+ |> Sql.execute (fun read ->
+ {
+ mountain = read.text "mountain"
+ height = read.int "height"
+ })
+ |> results.Add
+
+ // Display results.
+ printfn "%A" results
+
+ // Exit program successfully.
+ 0
+```
+
+:::{include} ../_cratedb.md
+:::
+```shell
+export DOTNET_CLI_TELEMETRY_OPTOUT=true
+dotnet run
+```
+
+:::{rubric} CrateDB Cloud
+:::
+
+For connecting to CrateDB Cloud, use `Sslmode=require`, and
+replace hostname, username, and password with values matching
+your environment.
+```f#
+let connString = "postgres://admin:password@testcluster.cratedb.net:5432/doc?sslmode=require";
+```
+
+## See also
+
+:::{div}
+- [Connection Strings in ADO.NET]
+- [ADO.NET Overview]
+:::
+
+
+[Npgsql]: https://www.npgsql.org/
+[Npgsql.FSharp]: https://github.com/Zaid-Ajaj/Npgsql.FSharp
diff --git a/docs/connect/index.md b/docs/connect/index.md
index 3912e98a..26dcebd1 100644
--- a/docs/connect/index.md
+++ b/docs/connect/index.md
@@ -49,6 +49,34 @@ CrateDB drivers and adapters for supported programming languages, frameworks, an
:gutter: 3
:padding: 0
+::::{grid-item-card} C#
+:link: connect-csharp
+:link-type: ref
+:link-alt: Connect to CrateDB using C#
+:padding: 3
+:text-align: center
+:class-card: sd-pt-3
+:class-body: sd-fs-1
+:class-title: sd-fs-6
+```{image} /_assets/icon/csharp-logo.svg
+:height: 50px
+```
+::::
+
+::::{grid-item-card} F#
+:link: connect-fsharp
+:link-type: ref
+:link-alt: Connect to CrateDB using F#
+:padding: 3
+:text-align: center
+:class-card: sd-pt-3
+:class-body: sd-fs-1
+:class-title: sd-fs-6
+```{image} /_assets/icon/fsharp-logo.svg
+:height: 50px
+```
+::::
+
::::{grid-item-card} Java
:link: connect-java
:link-type: ref
@@ -108,6 +136,20 @@ CrateDB drivers and adapters for supported programming languages, frameworks, an
::::
+::::{grid-item-card} Visual Basic
+:link: connect-visualbasic
+:link-type: ref
+:link-alt: Connect to CrateDB using Visual Basic
+:padding: 3
+:text-align: center
+:class-card: sd-pt-3
+:class-body: sd-fs-1
+:class-title: sd-fs-6
+```{image} /_assets/icon/visualbasic-logo.svg
+:height: 50px
+```
+::::
+
:::::
@@ -176,11 +218,14 @@ application
:maxdepth: 1
:hidden:
+csharp/index
+fsharp/index
java
javascript
php
python
ruby
+visualbasic/index
natural
All drivers
```
diff --git a/docs/connect/visualbasic/index.md b/docs/connect/visualbasic/index.md
new file mode 100644
index 00000000..d6ea26cc
--- /dev/null
+++ b/docs/connect/visualbasic/index.md
@@ -0,0 +1,97 @@
+:::{include} /_include/links.md
+:::
+
+(connect-visualbasic)=
+# Visual Basic
+
+:::{div} sd-text-muted
+Connect to CrateDB from Visual Basic .NET applications.
+:::
+
+:::{rubric} About
+:::
+
+[Npgsql] is an open source ADO\.NET Data Provider for PostgreSQL, for programs
+written in C#, F#, or Visual Basic.
+
+:::{rubric} Synopsis
+:::
+
+`example.vbproj`
+```xml
+
+
+
+ Exe
+ net$(NETCoreAppMaximumVersion)
+ false
+
+
+
+
+
+
+
+```
+`example.vb`
+```visualbasic
+Imports Npgsql
+Imports System
+
+Module Example
+
+ Public Sub Main(args As String())
+ Dim cs As String
+ Dim cn As NpgsqlConnection
+ Dim dr As NpgsqlDataReader
+
+ 'Connect to database.
+ cs = "Host=localhost;Port=5432;Username=crate;Password=crate;Database=doc;Sslmode=disable"
+ cn = New NpgsqlConnection(cs)
+ cn.Open()
+
+ 'Invoke basic query.
+ Dim sSQL = "SELECT mountain, height FROM sys.summits ORDER BY height DESC LIMIT 3"
+ Dim cmd As New NpgsqlCommand(sSQL, cn)
+
+ 'Display results.
+ dr = cmd.ExecuteReader()
+ Do While dr.Read()
+ Console.WriteLine(dr.GetString(0) & ": " & dr.GetInt32(1))
+ Loop
+
+ 'Clean up.
+ dr.Close()
+ cn.Close()
+ End Sub
+
+End Module
+```
+
+:::{include} ../_cratedb.md
+:::
+```shell
+export DOTNET_CLI_TELEMETRY_OPTOUT=true
+dotnet run
+```
+
+:::{rubric} CrateDB Cloud
+:::
+
+For connecting to CrateDB Cloud, use `Sslmode=require`, and
+replace hostname, username, and password with values matching
+your environment.
+```visualbasic
+cs = "Host=testcluster.cratedb.net;Port=5432;Username=admin;Password=password;Database=doc;Sslmode=require"
+```
+
+## See also
+
+:::{div}
+- [Connection Strings in ADO.NET]
+- [ADO.NET Overview]
+:::
+
+
+[Npgsql]: https://www.npgsql.org/
+[Npgsql.FSharp]: https://github.com/Zaid-Ajaj/Npgsql.FSharp