2017-01-25 2 views
-1

Описание проекта: Классический ASP с SQL 2012.Вставка данных в таблицу БД из другой таблицы БД - (классический ASP)

У меня есть Excel файл с двумя колонками («F1» & «F2»), содержащий около 3000 записей.

У меня также есть таблица SQL2012 с именем «BACKUPP» с 3 столбцами («ID» «KODIKOS» «APOTHEMA»).

Я хочу вставить все данные из Excel в таблицу «BACKUPP». я уже успешно подключен как Excel & БД SQL со следующим образом:

ДЛЯ EXCEL:

Dim RS_EXCEL 
Dim RS_EXCEL_cmd 
Dim RS_EXCEL_numRows 
Set RS_EXCEL_cmd = Server.CreateObject ("ADODB.Command") 
RS_EXCEL_cmd.ActiveConnection = MM_connnectt_STRING 
RS_EXCEL_cmd.CommandText = "SELECT * FROM ['Website stock$']" RS_EXCEL_cmd.Prepared = true 
Set RS_EXCEL = RS_EXCEL_cmd.Execute 
RS_EXCEL_numRows = 0 

Используя следующую строку соединения:

MM_connnectt_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\OLA\SITES\SuperCleanerWINHOST\BACK\file.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";" 

ДЛЯ БД SQL :

Dim RS_SQL 
Dim RS_SQL_cmd 
Dim RS_SQL_numRows 
Set RS_SQL_cmd = Server.CreateObject ("ADODB.Command") 
RS_SQL_cmd.ActiveConnection = MM_syndesi_STRING 
RS_SQL_cmd.CommandText = "SELECT * FROM dbo.BACKUPP" 
RS_SQL_cmd.Prepared = true 
Set RS_SQL = RS_SQL_cmd.Execute 
RS_SQL_numRows = 0 

Использование следующая строка подключения:

MM_syndesi_STRING = "dsn=DSN_supercle_dsn;uid=DB_107185_cleanerdb_user;pwd=XXXXX;" 

Оба моих соединения работают идеально на месте. Я также тестирую их в Интернете, а также без проблем.

Так что я могу легко получить данные без каких-либо проблем, из Excel & SQL db. Моя проблема в том, что я не знаю, как вставить все данные из db Excel в sql db.

Я хочу, чтобы колонка «F1» из БД Excel для вставки в столбец «KODIKOS» И Колонка «F2» из БД Excel для вставки в столбец «APOTHEMA».

Мое знание программирования не очень хорошо. Я в основном дизайнер. Любая помощь будет принята

ответ

-1

Отбросьте код, сгенерированный Dreamweaver. Если вы вставляете данные, вам лучше использовать запрос вставки, а не открывать другой набор записей. Вот как бы я это сделать:

<% 
Dim conn1, conn2, rs, rssql, insertsql 

Set conn1 = Server.Createobject("ADODB.Connection") 
Set conn2 = Server.Createobject("ADODB.Connection") 

conn1.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\OLA\SITES\SuperCleanerWINHOST\BACK\file.xls;Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"";" 

conn2.open "dsn=DSN_supercle_dsn;uid=DB_107185_cleanerdb_user;pwd=XXXXX;" 

set rs = Server.CreateObject("ADODB.Recordset") 
rssql = "SELECT * FROM ['Website stock$']" 
rs.open rssql,conn1,0,1 

Do While Not rs.eof 

insertsql = "INSERT into dbo.BACKUPP (KODIKOS, APOTHEMA) values ('" & rs("F1") & "', '" & rs("F2") & "')" 

'Response.write insertsql 
conn2.execute(insertsql) 

rs.movenext 
Loop 

rs.close 
conn1.close 
conn2.close 

Set rs = Nothing 
Set conn1 = Nothing 
Set conn2 = Nothing 
%> 

В основном то, что происходит, что мы пробегаем через вставку записи каждую строку из документа первенствовать в базу данных SQL.

Я добавил комментарий response.write insertsql, потому что очень легко ошибаться, когда вы вставляете переменные записей в строку SQL, и это хорошая идея, чтобы прочитать фактический SQL, который выводит ваш скрипт, прежде чем пытаться выполните его. Для этого вы раскомментируете оператор response.write и комментируете оператор conn2.execute.

Я предполагаю, что это страница «за кулисами». Если это общедоступно, вам нужно посмотреть, как защитить от SQL-инъекций Attaccks.

+0

В ту минуту, когда я увидел, что это был классический код DW 'MM_', я ушел ... извините. – Lankymart

+0

Плюс, если у них есть SQL Server, они [могли бы делать все это внутри T-SQL] (http://stackoverflow.com/q/472638/692942), не нужно классическому ASP вообще. – Lankymart

+0

Ваша почетная благодарность Джон. Я попробую это с твоим путем. Еще раз спасибо! – user2986570

0

Для таких задач вы гораздо лучше используете возможности SQL Server напрямую для импорта данных, это то, что было разработано OPENROWSET для.

INSERT INTO dbo.BACKUPP 
SELECT * 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 
'Excel 8.0;Database=D:\OLA\SITES\SuperCleanerWINHOST\BACK\file.xls','SELECT * FROM [Website stock$]') 

Удивительная вещь об этом подходе есть вы все еще можете назвать это от классического ASP просто обернуть его в хранимую процедуру и вызвать через ADODB.Command объекта, что-то подобное;

Dim cmd, conn_string 
conn_string = "dsn=DSN_supercle_dsn;uid=DB_107185_cleanerdb_user;pwd=XXXXX;" 

Set cmd = Server.CreateObject("ADODB.Command") 
With cmd 
    .ActiveConnection = conn_string 
    .CommandType = adCmdStoredProc 
    .CommandText = "dbo.YourStoredProc" 
    Call .Execute() 
End With 
Смежные вопросы