Access-ből MS SQL-be importálás
2009-09-24T10:14:17+02:00
2009-09-24T12:52:50+02:00
2022-07-24T06:55:28+02:00
Throo
Sziasztok!

Egy olyan probléma megvalósításánál ütköztem akadályba, amit (mint minden problémát) meg kellene oldani. Egy access adatbázisból kellene adatokat átemelnem MS SQL szerverbe, és mindezt asp .net keretein belül. Az MS SQL elérésével, írásával és olvasásával nem is lenne gond, már követtem el párszor. :) A gondom az, hogy hogyan tudom kiolvasni az accessből az adatokat! Mindezt 1 aspx keretén belül. Ha valaki megmondaná hogy s mint, az nagy segítség lenne! A connection string már nagyjából megvan, de nem tudom hogy jutok hozzá az adatokhoz belőle. Egy mintapéldát próbáltam átszabni, amit a neten láttam, de nem jött össze. A lényeg, hogy a tábla tartalmát egy (vagy több) változóba emeltetném ki, amit azután könnyedén tudok az MS SQL insert utasításába helyettesíteni. A minta amivel próbálkoztam:

<%@ Page Language="VBScript" debug="True" runat="server"%> <%@ import namespace="system.data.sqlclient" %> <%@ Import Namespace="System.Data.OleDb" %> <html> <head> .... </head> <body> ... <script runat="server"> sub Page_Load dim adatbaziskapcsolat dim sql dim dbcomm dim adatreader adatbaziskapcsolat=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;data source=" & server.mappath("adatbazis.mdb")) adatbaziskapcsolat.Open sql="SELECT * FROM tablanev" dbcomm=New OleDbCommand(sql,adatbaziskapcsolat) adatreader=dbcomm.ExecuteReader() tablanev.DataSource=dbread tablanev.DataBind() ???? end sub </script> ... </body> </html>


A .mdb elméletileg a wwwroot-ban van. A forrástábla n rekord, m mező. A céltábla x rekord n+sok mező. A mezőnevek ismertek, tehát az insert-nél erre hivatkoznék.

Remélem nagyjából érthető voltam :)

Előre is köszönöm a segítséget!

Üdv:

Throo
Mutasd a teljes hozzászólást!
OFF
Típusosságról hallottál már?

ON
Dim sqlcmd As New SQLCommand("INSERT INTO table (f1, f2) VALUES (@f1, @f2)", sqlconn) sqlcmd.Parameters.Add("@f1", SQLDataType.VarChar, 50) sqlcmd.Parameters.Add("@f1", SQLDataType.Int) ... adatreader=dbcomm.ExecuteReader() Do While adatreader.Read sqlcmd.Parameters("@f1").Value = adatreader("f1") sqlcmd.Parameters("@f2").Value = adatreader("f2") sqlcmd.ExecuteNonQuery() Loop adatreader.Close()
Egynéhány try-catch blokkot nem árt még beszúrni
Ezen felül ha sokáig tart a művelet, akkor gondjaid lehetnek a timeout-tal.

Fejből írtam, lehet benne hiba
Mutasd a teljes hozzászólást!

  • Köszi szépen!

    Ha hazaestem meglesem! Tipusosságról hallottam már de nem emlékszem mit jelent. Jópár éve már ennek. Egyébként minden adat szöveg. A try-catch blokk szintén ismeretlen, de ellenőrzésnek veszem. Timeouttal nem hinném hogy gond lenne, kb 800 rekord, rekordonként 8 mező. szóval nem vészes, csak nem tudok jobb megoldást hirtelen az adatok átemelésére...
    Egyébként még kezdő vagyok ilyen (asp, .net, VB és objektumok) téren, ezért kell a segítség.
    Ha sikerül (vagy nem) jelentkezem!
    Ha valakinek még akad másforma gondolata, azt is szívesen veszem! (pl nem ennyire túlkomplikált adatelérés az accesshez)

    Üdv:

    Throo
    Mutasd a teljes hozzászólást!
  • típusosság:
    dim adatbaziskapcsolat dim sql dim dbcomm dim adatreader


    helyett:
    Dim adatbaziskapcsolat AS OleDbConnection Dim sql As string Dim dbcomm As OleDbCommand Dim adatreader As OleDbDataReader
    Mutasd a teljes hozzászólást!
abcd