我正在从CSV文件流式传输数据并尝试将其导入SQL Server 2008.我在网上浏览了一下,我想出了这种方法,但这种方法无效。关于如何使其更好的任何想法(从某种意义上说它实际上有效)。
输入参数是DataTable中的CSV数据。
以下是代码:
private void ExportCSV(DataTable dtCSV)
{
DateTime dayOfYear = DateTime.Now.Date;
dtCSV.TableName = "ActivationDate_"+dayOfYear.ToString();
string createTempTable = "SELECT * INTO ThisActivation FROM @tvp";
using (SqlDataAdapter adap = new SqlDataAdapter(createTempTable,GetConnection()))
{
adap.InsertCommand.Parameters.Add("@tvp", SqlDbType.NVarChar, int.MaxValue);
adap.InsertCommand.Parameters["@tvp"].Value = dtCSV;
adap.InsertCommand.ExecuteNonQuery();
}
}
答案 0 :(得分:2)
您无法参数化表名(或列名称)。
可以恢复为dynamic SQL的一个选项,但最多可以打开SQL injection。
虽然您应该非常小心地验证dtCSV
以避免SQL注入。
string createTempTable = "SELECT * INTO ThisActivation FROM " + dtCSV;