2017-01-25 35 views
-1

プロジェクト詳細:SQL 2012- (クラシックASP)

でクラシックASP私はExcelが2つだけの列(「F1」&「F2」を持つファイル持っています)約3000のレコードを含む。

私はまた、3列( "ID" "KODIKOS" "APOTHEMA")を持つ "BACKUPP"という名前のSQL2012テーブルを持っています。

Excelからすべてのデータを「BACKUPP」テーブルに挿入したいとします。 私はすでに成功し、次のように、両方のエクセル&のSQL DBに接続されている:EXCEL FOR

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 FOR

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データベースから問題なく簡単にデータを取得できます。 私の問題は、ExcelデータベースからSQLデータベースにすべてのデータを挿入する方法がわからないことです。

私は、Excelデシベルの「F1」の欄には「KODIKOS」欄 そして 「APOTHEMA」欄に挿入するExcelの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データベースにExcel文書から各行を挿入するレコードセットをループしていることです。

レコードセット変数をSQL文字列に挿入するときに間違いを覚えるのは非常に簡単なので、コメントアウトしたresponse.write insertsqlステートメントを追加しました。しようとする前にスクリプトが出力する実際のSQLを読むことをお勧めします実行してください。これを行うには、response.writeステートメントのコメントを外し、conn2.executeステートメントをコメントします。

私はこれが「舞台裏」のページであると仮定しています。もしそれが正面に向いているなら、SQLインジェクション攻撃を防ぐ方法を調べる必要があります

+0

私が見た分は、古典的なDW「MM_」コードでした。私は離れました...ごめんなさい。 – Lankymart

+0

プラス彼らは[ちょうどT-SQL内のすべてのことを行うことができます] SQL Serverの(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$]') 

このアプローチについての素晴らしい事は、あなたはまだだけのストアドプロシージャでそれをラップし、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