2009-04-28 7 views
1

Je suis très nouveau sur F #, et j'essayais de trouver le moyen le plus simple de se connecter à Access 2007 en utilisant System.Data.OleDb. J'ai fait ceci avec C#, mais je n'arrive pas à comprendre comment convertir la syntaxe en F #. Ce qui suit est ce que je sais à ce jour:F # et ADO.NET pour se connecter à Access 2007

#light 
open System.Windows.Forms 
open System.Data.OleDb 
open System.Data 

let ADOCon = new OleDbConnection() 
let DTab = new DataTable() 

ADOCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\...mdb" 

Je sais que la syntaxe de la chaîne de connexion est mauvaise, et je ne peux pas comprendre comment ajouter un OleDataAdapter et OleCommandBuilder. Est-ce que quelqu'un connaît un exemple direct à partir de #light pour ouvrir la connexion? Merci d'avance!

Répondre

0

Si vous affichez le C# correspondant, cela peut aider.

En supposant que vous essayez d'attribuer une propriété sur la dernière ligne, alors vous voulez « < - »:

ADOCon.ConnectionString <- "yadda" 
+0

Merci - jusqu'à présent, j'ai travaillé sur ce qui suit; cependant, je ne peux pas sembler remplir mon datatable: laisser frmMain = nouveau formulaire() // Connexion à Accesss Db // laisser adoCon = new OleDbConnection (@ "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C: \ Users \ ... \ Desktop \ FSharpDb.mdb ") laisser DAdapter = new OleDbDataAdapter (" Select * from Names_Table », adoCon) nous DTable = new DataTable() DAdapter.Fill (DTable) let ConnectionString = ADOCon.Open() –

1

Il en est ainsi pas le F # façon de faire les choses, mais cela fonctionne ...

open System.Data 
open System.Data.OleDb 

let cmd = new OleDbCommand("SELECT * FROM TABLE1"); 
let conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Database1.mdb;Persist Security Info=False;") 

conn.Open(); 
cmd.Connection <- conn; 
    using (cmd.ExecuteReader()) 
    (fun reader -> 
     if (reader.HasRows) then 
     (
      printfn "Queried: %s" cmd.CommandText 
      while (reader.Read()) do 
      (
       let id = reader.GetInt32(0) 
       let tmp = reader.GetString(1) 

       printfn "%d %s" id tmp 
      ) 
      done 
     ) 
     else (printfn "Empty result") 
    ) 

conn.Close(); 
;; 
+0

Merci - les deux lignes de code directement ci-dessous open System.Data.OleDb m'a énormément aidé. Maintenant, j'ai des problèmes pour remplir mon datatable. J'utilise en fait un winform et des contrôles associés pour afficher les données de la base de données Access, donc j'utilise un DataAdapter et un DataTable. Par exemple, DataAdapter.Fill (DataTable) ne fonctionne pas; bien, probablement faux. –

0

J'ai finalement compilé un code pour lire un Access 2007 Db en F # d'un WinForm:

open System.Data.OleDb 
open System.Data 

//Create winform// 
let frmMain = new Form() 

//Connect to Access Db// 
let ADOCon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; 
    Data Source=C:\Users\...\Desktop\FSharpDb.mdb") 

let DAdapter = new OleDbDataAdapter("Select * from Names_Table", ADOCon) 

let DTable = new DataTable() 
DAdapter.Fill(DTable)|>ignore 
let view = new DataGridView() 
do view.DataSource <- DTable 

let ConnectionString = 
    ADOCon.Open() 

frmMain.Controls.Add(view) 

//Run main form on start up 
Application.Run(frmMain) 

Merci à tous ceux qui ont aidé!

Questions connexes