Mysql
 sql >> база данни >  >> RDS >> Mysql

F# Начинаещ:извличане на масив от данни от сървър

Типът Seq има чиста функция за работа с курсори на база данни, наречена generate_using (вижте F# Ръководство и главата за достъп до данни в Основи на F# ). Това е функция от по-висок порядък, която приема една функция за отваряне на курсора и друга (извиквана многократно) за обработка на записи от курсора. Ето малко код, който използва generate_using за изпълнение на sql заявка:

let openConnection (connectionName : string) =
    let connectionSetting = ConfigurationManager.ConnectionStrings.Item(connectionName)
    let connectionString = connectionSetting.ConnectionString
    let connection = new OracleConnection(connectionString)
    connection.Open()
    connection

let generator<'a> (reader : IDataReader) =
    if reader.Read() then
        let t = typeof<'a>
        let props = t.GetProperties()
        let types = props
                    |> Seq.map (fun x -> x.PropertyType)
                    |> Seq.to_array
        let cstr = t.GetConstructor(types)
        let values = Array.create reader.FieldCount (new obj())
        reader.GetValues(values) |> ignore
        let values = values
                     |> Array.map (fun x -> match x with | :? DBNull -> null | _ -> x)
        Some (cstr.Invoke(values) :?> 'a)
    else
        None

let executeSqlReader<'a> (connectionName : string) (sql : string) : 'a list =        
    let connection = openConnection connectionName

    let opener() = 
        let command = connection.CreateCommand(CommandText = sql, CommandType = CommandType.Text)
        command.ExecuteReader()

    let result = Seq.to_list(Seq.generate_using opener generator)        

    connection.Close()
    connection.Dispose()
    result

Например, за да изброим всички таблици в база данни на Oracle, трябва да дефинираме тип дефиниция на колона и да извикаме executeSqlReader, както следва:

type ColumnDefinition = {
    TableName : string;
    ColumnName : string;
    DataType : string;
    DataLength : decimal;                
}

let tableList = executeSqlReader<ColumnDefinition>
    "MyDatabase"
    "SELECT t.table_name, column_name, data_type, data_length FROM USER_TABLES t, USER_TAB_COLUMNS c where t.TABLE_NAME = c.table_name order by t.table_name, c.COLUMN_NAME"


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да промените паролата на базата данни

  2. SQL Inner Join – Как да се присъедините към 3 таблици в SQL и MySQL

  3. В PHP с PDO, как да проверя окончателната SQL параметризирана заявка?

  4. Множество маси се съединяват в релси

  5. PHP/MySQL Вмъкване на нулеви стойности