Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Копирование данных из таблицы Access в таблицу SQL / 13 сообщений из 13, страница 1 из 1
17.11.2006, 12:41
    #34136179
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Здравствуйте!
Есть 2 таблицы..
Структура одинаковая…
Исходные данные расположенны в базе данных ACCESS, из них надо тупо заливать данные в таблицу SQL сервера… (предварительно сделав транкейт таблицы…) не работет прога, уверен, что как то нетак использую АДО…

КОД (на импорты внимания не обращайте...осталось от экспириментов):
Option Explicit On
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports ADODB.CursorTypeEnum
Imports ADODB.LockTypeEnum
Imports ADODB.CommandTypeEnum
Imports ADODB.CursorLocationEnum


Module convertion
Sub Main()
Dim cnAccess As ADODB.Connection
Dim cnMSSQL As ADODB.Connection
Dim array As String

cnAccess = New ADODB.Connection()
cnMSSQL = New ADODB.Connection()

cnAccess.Open(ConnectString("Access"))
cnMSSQL.Open(ConnectString("MSSQL"))
'Отчистка таблицы
cnMSSQL.Execute("Truncate table DBO.Traffic")
'Тут грабли
cnMSSQL.Execute("SELECT * INTO DBO.Traffic FROM" & _
[ConnectString("Access")]. & _
[Traffic;]")


cnAccess.Close()
cnAccess = Nothing
cnMSSQL.Close()
cnMSSQL = Nothing
End Sub

Private Function ConnectString(ByVal strDataBaseName As String) As String


Select Case strDataBaseName
Case "MSSQL"
ConnectString = "Provider=sqloledb; Data Source=DB-01; Initial Catalog=traffic; User Id=sa; Password="
Case "Access"
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\traffic_count\traffic.mdb; USER ID=Admin;password="
End Select
End Function
End Module
...
Рейтинг: 0 / 0
17.11.2006, 14:55
    #34136904
Bigheadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
авторне работет прога, уверен, что как то нетак использую АДО…

Вы бы хоть симптомы описали. Что значит не работает?????? Ошибку выдает, не выполняет копирование данных или что????

P.S. Я бы для этой задачи использовал DTS.
...
Рейтинг: 0 / 0
17.11.2006, 15:08
    #34136958
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Anatoly Ustinov
Код: plaintext
1.
2.
3.
'Тут грабли
        cnMSSQL.Execute("SELECT * INTO DBO.Traffic FROM" & _
        [ConnectString("Access")]. & _
        [Traffic;]")

Вы перед граблями сделайте так:

Код: plaintext
1.
2.
3.
4.
5.
6.
Dim query As String
'...
query = "SELECT * INTO DBO.Traffic FROM" & _
        "[ConnectString("Access")]." & _
        "[Traffic;]"

'Здесь поставьте точку останова и посмотрите, что Вы пытаетесь сервер заставить выполнять
А на сервер уходит запрос:
Код: plaintext
SELECT * INTO DBO.Traffic FROM[ConnectString("Access")].[Traffic;]
Могу сразу примерно сказать, что скажет по этому поводу сервер :-)
А скажет он, что таблица [ConnectString("Access")].[Traffic;] на сервере не обнаружена.
...
Рейтинг: 0 / 0
17.11.2006, 16:10
    #34137247
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Спасибо за ответы... после ряда экспериментов перделал следующим образом:

Dim query As String
'...
query = "SELECT * INTO DBO.Traffic FROM" & _
"[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\traffic_count\traffic.mdb; USER ID=Admin;password=]." & _
"[Traffic;]"

'Замена экзека граблей

cnMSSQL.Execute("Truncate table DBO.Traffic")
'array = "SELECT * from Traffic"
cnMSSQL.Execute("query")

выводится вот такая строка запроса

"SELECT * INTO DBO.Traffic FROM[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\traffic_count\traffic.mdb; USER ID=Admin;password=].[Traffic;]"

как это заставить работать, непонятно....
...
Рейтинг: 0 / 0
17.11.2006, 21:37
    #34137975
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Вопрос пока сотается открытым... ничего не могу сделать :) я бездарность....
...
Рейтинг: 0 / 0
17.11.2006, 22:51
    #34138047
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Вот Вам пример. Правда он не на бейсике, а на C#. Копирует данные из таблицы TestTable базы данных c:\work\access40.mdb в таблицу Table1 на сервере SQL.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
using System;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

class Program
{
  static void Main()
  {
    DataSet ds = new DataSet();

    using (OleDbConnection access = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\work\access40.mdb;"))
    {
      using (OleDbCommand cmd = access.CreateCommand())
      {
        cmd.CommandText = "select Id, Name from TestTable";

        access.Open();
        using (OleDbDataReader reader = cmd.ExecuteReader())
        {
          ds.Load(reader, LoadOption.OverwriteChanges, "TestTable");
        }
      }

      using (SqlConnection sql = new SqlConnection(@"Data Source=(local);Initial Catalog=Budget;Integrated Security=True;"))
      {
        using (SqlCommand cmd = sql.CreateCommand())
        {
          cmd.CommandText = "insert Table1 values (@Id, @Name)";
          cmd.CommandType = CommandType.Text;

          cmd.Parameters.Add("@Id", SqlDbType.Int);
          cmd.Parameters.Add("@Name", SqlDbType.VarChar, 10);

          sql.Open();
          cmd.Prepare();

          foreach (DataRow dr in ds.Tables[0].Rows)
          {
            cmd.Parameters["@Id"].Value = dr["Id"];
            cmd.Parameters["@Name"].Value = dr["Name"];
            cmd.ExecuteNonQuery();
          }
        }
      }
    }
  }
}
--
WBR,
RA1OGE
...
Рейтинг: 0 / 0
18.11.2006, 00:04
    #34138102
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
На сервере копировать.

Читать BOL по поводу
OPENROWSET(provider_name,provider_string,query_syntax)
...
Рейтинг: 0 / 0
18.11.2006, 00:20
    #34138115
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
ИзопропилНа сервере копировать.
Думаю, если бы автору надо было копировать данные на сервере, то он написал бы в конференцию по серверу, а не по ADO.Net. Давайте дождемся от автора разъяснений по этому вопросу.
...
Рейтинг: 0 / 0
18.11.2006, 00:26
    #34138122
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Roman S. GolubinДавайте дождемся от автора разъяснений по этому вопросу.

Давайте. Но
query = "SELECT * INTO DBO.Traffic FROM" & _
"[Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\traffic_count\traffic.mdb; USER ID=Admin;password=]." & _
"[Traffic;]"
наводит именно на мысли о сервере....
...
Рейтинг: 0 / 0
18.11.2006, 01:53
    #34138163
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Код планируется исполнять на сервере, где и расположена база Access с данными из программы все обязательно попробую сегодня, отпишусь!
Еще раз всем Вам огромное спасибо..
...
Рейтинг: 0 / 0
18.11.2006, 10:20
    #34138287
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Anatoly UstinovКод планируется исполнять на сервере, где и расположена база Access с данными из программы все обязательно попробую сегодня, отпишусь!
Еще раз всем Вам огромное спасибо..

Если положение акскссной базы часто не меняется - удобнее создать linked server и обращаться к аксессной базе в виде SELECT * FROM mydb...mytable
...
Рейтинг: 0 / 0
20.11.2006, 00:32
    #34139666
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
Огромное спасибо, все заработало, код помог!
...
Рейтинг: 0 / 0
20.11.2006, 00:43
    #34139669
Anatoly Ustinov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование данных из таблицы Access в таблицу SQL
код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace trafcounter_converter
{
    class Program
    {
        static void Main()
        {
            DataSet ds = new DataSet();

            using (OleDbConnection access = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\project\traffic.mdb;"))
            {
                using (OleDbCommand cmd = access.CreateCommand())
                {
                    cmd.CommandText = "select id, clcGlobalID, Dates, Hours, TDTDate, RealIn, RealOut, RealSum from Traffic";

                    access.Open();
                    using (OleDbDataReader reader = cmd.ExecuteReader())
                    {
                        ds.Load(reader, LoadOption.OverwriteChanges, "TestTable");
                    }
                }
                using (SqlConnection sql = new SqlConnection(@"Data Source=ZLO;Initial Catalog=SMS_XX;Integrated Security=true;"))
                {
                    using (SqlCommand cmd = sql.CreateCommand())
                    {
                        cmd.CommandText = "truncate table Traffic";
                        sql.Open();
                        cmd.Prepare();
                        cmd.ExecuteNonQuery();
                        
                    }
                }

                using (SqlConnection sql = new SqlConnection(@"Data Source=ZLO;Initial Catalog=SMS_XX;Integrated Security=true;"))
                {
                    using (SqlCommand cmd = sql.CreateCommand())
                    {
                        cmd.CommandText = "insert Traffic values (@id, @clcGlobalID, @Dates, @Hours, @TDTDate, @RealIn, @RealOut, @RealSum)";
                        cmd.CommandType = CommandType.Text;

                        cmd.Parameters.Add("@Id", SqlDbType.Int);
                        cmd.Parameters.Add("@clcGlobalID", SqlDbType.Int);
                        cmd.Parameters.Add("@Dates", SqlDbType.DateTime);
                        cmd.Parameters.Add("@Hours", SqlDbType.Int);
                        cmd.Parameters.Add("@TDTDate", SqlDbType.DateTime);
                        cmd.Parameters.Add("@RealIn", SqlDbType.Int);
                        cmd.Parameters.Add("@RealOut", SqlDbType.Int);
                        cmd.Parameters.Add("@RealSum", SqlDbType.Int);

                        sql.Open();
                        cmd.Prepare();

                        foreach (DataRow dr in ds.Tables[ 0 ].Rows)
                        {
                            cmd.Parameters["@Id"].Value = dr["Id"];
                            cmd.Parameters["@clcGlobalID"].Value = dr["clcGlobalID"];
                            cmd.Parameters["@Dates"].Value = dr["Dates"];
                            cmd.Parameters["@Hours"].Value = dr["Hours"];
                            cmd.Parameters["@TDTDate"].Value = dr["TDTDate"];
                            cmd.Parameters["@RealIn"].Value = dr["RealIn"];
                            cmd.Parameters["@RealOut"].Value = dr["RealOut"];
                            cmd.Parameters["@RealSum"].Value = dr["RealSum"];
                            cmd.ExecuteNonQuery();
                        }
                    }
                }
            }
        }
    }
}
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Копирование данных из таблицы Access в таблицу SQL / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]