Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

F # Beginner:lấy một mảng dữ liệu từ máy chủ

Loại Seq có một chức năng gọn gàng để xử lý con trỏ cơ sở dữ liệu được gọi là create_using (xem F # Thủ công và chương Truy cập dữ liệu trong Cơ sở của F # ). Đây là một hàm bậc cao hơn sử dụng một hàm để mở con trỏ và một hàm khác (được gọi nhiều lần) để xử lý các bản ghi từ con trỏ. Đây là một số mã sử dụng create_using để thực thi truy vấn 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

Ví dụ:để liệt kê tất cả các bảng trong cơ sở dữ liệu Oracle, chúng ta cần xác định kiểu định nghĩa cột và gọi executeSqlReader như sau:

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. Cảnh báo:mysql_query ():đối số được cung cấp không phải là tài nguyên MySQL-Link hợp lệ

  2. Làm thế nào để nhóm các hàng mysql có cùng giá trị cột thành một hàng?

  3. Câu hỏi MySQL - Làm thế nào để xử lý nhiều kiểu người dùng - một bảng hay nhiều?

  4. Xóa một phần của chuỗi trong MYSQL

  5. Làm cách nào để phóng to Sơ đồ EER trong MySQL Workbench?