Vorrei creare in automatico un db access.
Con le asp semplici usavo adox,
con asp.net cosa devo usare?
Se è sempre adox, in che modo lo si utilizza?
Ciao e grazie
Vorrei creare in automatico un db access.
Con le asp semplici usavo adox,
con asp.net cosa devo usare?
Se è sempre adox, in che modo lo si utilizza?
Ciao e grazie
E' da tanto che non uso Adox o che non manipolo Access via codice. Ho però un vecchio esercizio che fa uso di Adox:
Per prima cosa si aggiunge nelle References un riferimento alla libreria: Microsoft ADO Ext. 2.8 for DDL and Security
Dopo di che si può utilizzare. Ti mando un esempio che Aggiunge/toglie colonna con AdoX e che Aggunge/toglie colonna con Alter Table
codice:'Aggiunge/toglie colonna con AdoX Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim adoCn As New ADODB.Connection adoCn.Open(StringaConnessione) Dim cat As New ADOX.CatalogClass cat.ActiveConnection = adoCn Dim t As ADOX.Table = cat.Tables("campi") Try t.Columns.Append("xyz", ADOX.DataTypeEnum.adWChar, 50) Catch ex As Exception t.Columns.Delete("xyz") Finally adoCn.Close() Libreria.DataBind(Me.DataGrid1, StringaConnessione, "SELECT * FROM CAMPI", "ID") End Try End Sub 'Aggunge/toglie colonna con Alter Table Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'con.Execute("CREATE TABLE tblCustomers (CustomerID LONG NOT NULL, [Last Name] TEXT(50) NOT NULL, [First Name] TEXT(50) NOT NULL, Phone TEXT(10), Email TEXT(50), [BYTE] BYTE, [INTEGER] SMALLINT, [LONG] LONG, [SINGLE] SINGLE, [DOUBLE] DOUBLE, [DATE] DATE, [CURRENCY] CURRENCY, [LOGICO] LOGICAL, [MEMO] MEMO, [COUNTER] AUTOINCREMENT, [OLEOBJECT] OLEOBJECT )") 'con.Execute("CREATE INDEX idxCustomerID ON tblCustomers (CustomerID) WITH PRIMARY") Dim con As OleDbConnection Dim sql$ = "ALTER TABLE CAMPI ADD COLUMN XYZ LONG" Dim Com As OleDbCommand Try con = New OleDbConnection(StringaConnessione) con.Open() Com = New OleDbCommand(sql, con) Com.ExecuteNonQuery() Catch ex As Exception Try sql = "ALTER TABLE CAMPI DROP COLUMN XYZ " Com.CommandText = sql Com.ExecuteNonQuery() Catch ex1 As Exception PrintLn(ex.Message) End Try Finally con.Close() Libreria.DataBind(Me.DataGrid1, StringaConnessione, "SELECT * FROM CAMPI", "ID") End Try End Sub
Pietro
ps. Naturalmente, correggi:
nella clausola Finally
prima fai il DataBind con la giusta funzione:
Libreria.DataBind(Me.DataGrid1, con, "SELECT * FROM CAMPI", "ID")
cioè gli passi la connessione e non la stringa di connessione,
Poi chiudi la connessione:
con.Close()
Pietro
Ok Pietro ti ringrazio,
il mio problema però è proprio
creare il db e non le tabelle che vi sono dentro,
quello lo saprei fare anche in sql.
Non so invece come
Potresti farmi un esempiosi aggiunge nelle References un riferimento alla libreria: Microsoft ADO Ext. 2.8 for DDL and Security
o è troppo complicato?
Ciao
allora, per creare i riferimenti uso visual studio e il modo è banale. Senza Visual studio ... :master: ...
Comunque, dissoterrando un vecchissimo esercizio in visual basic 6:
che stranamente mi funzionacodice:Dim db As DAO.Database Dim dbe As New DAO.DBEngine db = dbe.Workspaces(0).CreateDatabase("c:\tmp\prova.mdb", ";LANGID=0x0409;CP=1252;COUNTRY=0", 2) db.Close()
Non so se CreateDatabase esista pure con Ado o con AdoX
nb: di più non so
Pietro
va bene si può fare pure con AdoX
alla fine, chiudo SEMPRE la connessione, altrimenti il database creato risulta sempre in usocodice:Dim Catalog As New ADOX.Catalog Dim StringaConnessione$ = "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\tmp\prova.mdb;Mode=Share Deny None;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False" Catalog.Create(StringaConnessione) DirectCast(Catalog.ActiveConnection, ADODB.Connection).Close()
Pietro
ok grazie,
provo con il primo metodo
visto che il secondo non potrebbe cmq funzionarmi