2017-01-25 4 views
-1

프로젝트 세부 정보 : SQL 2012- (클래식 ASP)

와 클래식 ASP 나는 엑셀은 두 개의 열 ("F1"& "F2"로 파일이) 약 3000 레코드가 들어 있습니다.

또한 "BACKUPP"라는 3 개의 열 ("ID" "KODIKOS" "APOTHEMA")이있는 SQL2012 테이블이 있습니다.

Excel의 모든 데이터를 "BACKUPP"테이블에 삽입하려고합니다. 이미 성공적으로 다음과 같은 방법으로 두 엑셀 &의 SQL DB에 연결 한 다음 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 

다음 연결 문자열 사용 : SQL DB에 대한

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"";" 

을 :

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에서 아무 문제없이 쉽게 데이터를 검색 할 수 있습니다. 내 문제는 Excel db에서 모든 데이터를 SQL db에 삽입하는 방법을 모른다는 것입니다.

난 엑셀 DB의 "F1"열이 "APOTHEMA '항목에 삽입 될 수있는"KODIKOS'항목 그리고 엑셀 DB의 'F2'항목에 삽입 할.

프로그래밍 지식이 좋지 않습니다. 나는 주로 디자이너입니다. 도움이 되겠습니다.

답변

-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 데이터베이스로 엑셀 문서에서 각 행을 삽입 레코드 통해 반복하고 있다는 점이다.

레코드 문자열 변수를 SQL 문자열에 삽입 할 때 실수를하기 쉽기 때문에 response.write insertsql 문을 주석으로 추가했습니다. 시도하기 전에 스크립트가 출력하는 실제 SQL을 읽는 것이 좋습니다. 그것을 실행하십시오. 이렇게하려면 response.write 문을 주석 처리하고 conn2.execute 문을 주석 처리하십시오.

나는 "뒷이야기"페이지라고 가정합니다. 만약 공개 된 상태라면 SQL injection attaccks를 보호하는 방법을 살펴 봐야합니다.

+0

내가 보았던 것이 고전적인 DW'MM_' 코드 인 것을 보았을 때 ... 미안합니다. – Lankymart

+0

플러스 그들이 SQL 서버를 가지고 있다면 [T-SQL 내부에서 모든 것을 할 수 있습니다] (http://stackoverflow.com/q/472638/692942), Classic ASP가 필요 없습니다. – Lankymart

+0

귀하의 도움은 John에게 진심으로 감사드립니다. 나는 너의 길로 그것을 시도 할 것이다. 다시 한 번 감사드립니다! – 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$]') 

이 방법에 대한 멋진 것은 당신이 여전히 저장 프로 시저에 포장하고 ADODB.Command 객체를 통해 호출 클래식 ASP에서 호출 할 수 있습니다, 같은;

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