我正在开发一个 ASP.Net 站点,我希望允许用户导入一个 CSV 文件,其中每行中的数据可以插入或更新到 MySQL 数据库中的 1 或 2 个表。CSV 文件的范围可能从 1 到几千行,大约 6 或 7 列宽。
我想知道是否可以在不循环每一行并调用存储过程的情况下做到这一点,同时仍然防止 SQL 注入,因为这种方法看起来可能很慢?我还想知道,当这种情况发生时,这是否会使我的网站对所有当前用户都没有响应?
提前致谢
我正在开发一个 ASP.Net 站点,我希望允许用户导入一个 CSV 文件,其中每行中的数据可以插入或更新到 MySQL 数据库中的 1 或 2 个表。CSV 文件的范围可能从 1 到几千行,大约 6 或 7 列宽。
我想知道是否可以在不循环每一行并调用存储过程的情况下做到这一点,同时仍然防止 SQL 注入,因为这种方法看起来可能很慢?我还想知道,当这种情况发生时,这是否会使我的网站对所有当前用户都没有响应?
提前致谢
是的,最好的方法是使用 ASP.NET SqlBulkCopy 导入临时表。
然后使用 TSQL 复制到目标表。
将 csv 加载到 DataTable 中。
这是您需要的代码
使用连接作为 SqlConnection = New SqlConnection(conn)
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
MySqlBulkLoader loader = new MySqlBulkLoader(connection);
loader.TableName = "table name";
loader.FieldTerminator = "\t";
loader.LineTerminator = "\n";
loader.FileName = "path file";
loader.Load();