无法从Winforms应用程序将数据表上载到SqlServer 2008

时间:2011-07-21 08:06:19

标签: c# sql tsql ado.net

我正在从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();
        }
    }

1 个答案:

答案 0 :(得分:2)

您无法参数化表名(或列名称)。

可以恢复为dynamic SQL的一个选项,但最多可以打开SQL injection

虽然您应该非常小心地验证dtCSV以避免SQL注入。

string createTempTable = "SELECT * INTO ThisActivation FROM " + dtCSV;