2012-04-25 48 views
0

我正在開發一個ASP.Net站點,我想讓用戶導入一個CSV文件,其中每行數據可以插入或更新到MySQL數據庫中的1或2個表。 CSV文件的範圍可以從1到幾千行,大約6或7列。CSV通過ASP.NET到MySQL

我想知道是否有可能做到這一點沒有循環,雖然每行和調用存儲過程,同時仍然保護免受SQL注入,因爲這種方法似乎可能很慢?此外,我想知道這是怎麼回事,這將使我的網站對所有當前用戶沒有反應?

在此先感謝

回答

0

是,要做到這一點,最好的辦法是導入與ASP.NET SqlBulkCopy的一個臨時表。

然後使用TSQL複製到目標表。

將csv加載到DataTable中。

下面是代碼,你需要

使用連接作爲SqlConnection的=新的SqlConnection(康涅狄格州)

 connection.Open() 

     Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, Nothing) 

       bulkCopy.DestinationTableName = "TempTable" 

      bulkCopy.BulkCopyTimeout = 60000 

      bulkCopy.BatchSize = 0 

      bulkCopy.WriteToServer(MyDataTable) 

      bulkCopy.Close() 

     End Using 

     connection.Close() 

     End Using 
+0

好了十分感謝,我看着這個和它的出現SqlBulkCopy的不工作與MySQL,但相反,我發現MySqlBulkLoader似乎做同樣的事情,但MySQL。你知道如果MySqlBulkLoader防止SQL注入嗎? – Olly 2012-04-25 20:14:25

+0

無論您選擇哪種方法,都需要在保存文件之前解析文件。將文件複製到內存中並逐行解析,然後將其保存到處理的文件夾中。在分析檢查SQL注入命令期間。 – 2012-04-26 11:54:32

+0

好的,謝謝有任何API調用會解析它並刪除可能導致SQL注入的東西嗎?或者我需要自己手動對每個SQL命令進行分類,並刪除諸如「DROP」,「ALTER」,「GRANT」等分號和其他詞的內容? – Olly 2012-04-26 17:06:38

-1
MySqlBulkLoader loader = new MySqlBulkLoader(connection); 
loader.TableName = "table name"; 
loader.FieldTerminator = "\t"; 
loader.LineTerminator = "\n"; 
loader.FileName = "path file"; 
loader.Load(); 
+0

不提供代碼解答。相反,請添加一些關於此代碼如何回答問題的解釋。 – ace 2015-11-24 14:59:41