У вас есть три (четыре, если вы бросаете в ADO.NET) выбора для доступа к базе данных:
- Запас
SQLDataConnection
Type Provider поставляется с F # 3, который можно использовать с SQLServer. Он работает с SQLServer, и если вы предпочитаете работать с LINQ, это простой способ получить к нему доступ.
- Более современный и универсальный
SqlDataProvider
Type Provider, который работает с различными базами данных. Если ваша база данных не является чем-то вроде SQLServer, это используется поставщиком типов.
- И
SqlClient
Type Provider, которые предоставят вам доступ к безопасному SQL-типу. Если вы находитесь на SQLServer и хорошо разбираетесь в T-SQL, это путь.
Вы можете использовать все три, чтобы получить соответствующие данные. Вот один из способов с помощью запроса SQL с помощью SqlCommandProvider
(метод 3):
#r @"..\packages\FSharp.Data.SqlClient.1.8.2\lib\net40\FSharp.Data.SqlClient.dll"
open FSharp.Data
open System
[<Literal>]
let connectionString = @"Data Source=(localdb)\MSSQLLocalDB;AttachDbFilename=C:\Users\username\Documents\test.mdf;Integrated Security=True;Connect Timeout=10"
let cmd = new SqlCommandProvider<"select * from Information_schema.Columns where table_name = @tableName",connectionString>(connectionString)
let out = cmd.Execute(tableName="yourTableName")
out
|> Seq.map (fun x -> (x.COLUMN_NAME,x.DATA_TYPE))
|> Seq.toList
val it : (Option * Option) list = [(Some "AutoUpdated", Some "bigint"); (Some "UpdatedDate", Some "datetime"); (Some "DataDate", Some "datetime"); (Some "RandomStuff", Some "float"); ...]
Вы можете использовать x.COLUMN_NAME.Value
, если вы хотите, чтобы избавиться от типов параметров.
Чтобы получить все таблицы в базе данных (это отличается от всех таблиц на сервере). Вам просто нужно заменить DB_NAME на ваше имя базы данных (или вы можете просто пропустить, если это localdb):
let cmd2 = new SqlCommandProvider<"select TABLE_NAME from [DB_NAME].Information_Schema.Tables where table_type = 'BASE TABLE'",connectionString>(connectionString)
let out2 = cmd2.Execute()
out2 |> Seq.toList
Какая база данных? –
Оба. Честно говоря, мне не нужно было писать это первое предложение, это было просто для небольшого контекста. –
SQL Server? Oracle? MySQL? .. –