CSV 通过 ASP.NET 到 MySQL
Posted
技术标签:
【中文标题】CSV 通过 ASP.NET 到 MySQL【英文标题】:CSV to MySQL via ASP.NET 【发布时间】:2012-05-06 11:51:08 【问题描述】:我正在开发一个 ASP.Net 站点,我希望允许用户导入一个 CSV 文件,其中每行中的数据可以插入或更新到 mysql 数据库中的 1 或 2 个表。 CSV 文件的范围从 1 到几千行不等,大约 6 或 7 列宽。
我想知道是否有可能在不循环每一行并调用存储过程的情况下做到这一点,同时仍然防止 SQL 注入,因为这种方法看起来可能很慢?我还想知道,当这种情况发生时,这是否会使我的网站对所有当前用户都没有响应?
提前致谢
【问题讨论】:
【参考方案1】:是的,最好的方法是使用 ASP.NET SqlBulkCopy 导入临时表。
然后使用 TSQL 复制到目标表。
将 csv 加载到数据表中。
这是你需要的代码
使用连接作为 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
【讨论】:
好的,非常感谢,我对此进行了研究,似乎 SQLBulkCopy 不适用于 MySQL,但我发现 MySqlBulkLoader 似乎做同样的事情,但适用于 MySQL。你知道 MySqlBulkLoader 是否可以防止 SQL 注入吗? 无论您选择哪种方法,您都需要在保存之前解析文件。将文件复制到内存中并逐行解析,然后保存到已处理的文件夹中。在解析期间检查 SQL 注入命令。 好的,谢谢,是否有任何 API 调用可以解析它并删除可能导致 SQL 注入的内容?还是我需要自己手动对每个 SQL 命令进行分类,并删除分号和“DROP”、“ALTER”、“GRANT”等其他词?【参考方案2】:MySqlBulkLoader loader = new MySqlBulkLoader(connection);
loader.TableName = "table name";
loader.FieldTerminator = "\t";
loader.LineTerminator = "\n";
loader.FileName = "path file";
loader.Load();
【讨论】:
不鼓励使用纯代码的答案。相反,请添加一些关于此代码如何回答问题的解释。以上是关于CSV 通过 ASP.NET 到 MySQL的主要内容,如果未能解决你的问题,请参考以下文章
将用户上传的 CSV 文件从 ASP.NET 解析到 MySQL DB。安全问题