C#如何调用“sp_executesql”进行批量插入

时间:2018-03-06 21:22:19

标签: c# sql-server load sp-executesql

我有需要使用win form应用程序加载到db的文件 因为我是creationg bulkload字符串C#代码

  private void bt_loadInToTable_Click(object sender, EventArgs e)
        {
            bulkinsert = " BULK INSERT " + tableName + " FROM " + filePath +
        " WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'',BATCHSIZE = 1000,  CHECK_CONSTRAINTS = ON , ERRORFILE = '" + tableName + "file_name.txt' )";

            using (SqlConnection thisConnectionT = new SqlConnection("Server=" + serverName + ";User Id=" + uName + ";Password=" + pass + ";Database=" + dbName + ";"))
            {

                thisConnectionT.Open();

                new SqlCommand(bulkinsert, thisConnectionT);
               // bulkinsert.ExecuteNonQuery();
            }

        }

然而我想我称它有些错误,因为它没有加载,但没有发现错误 呼叫应该是exec sp_executesql bulkinsert

此C#代码应替换正在运行的 SQL 代码

DECLARE @bulkinsert NVARCHAR(2000)
set @bulkinsert = 'BULK INSERT ForTest FROM ''D:\\forBulk\\fortest.csv'' WITH (FIRSTROW = 2, FIELDTERMINATOR = '','', ROWTERMINATOR = ''\n'',BATCHSIZE = 1000 )'

EXEC sp_executesql @bulkinsert

如果我从sql端运行它的插入记录,但是从C#不是

抱歉,这可能是一个愚蠢的问题,但我是DB开发人员

2 个答案:

答案 0 :(得分:1)

您可能需要按照this article中的说明考虑使用SqlBulkCopy类。

暂时不说,我会避免通过字符串连接构建查询来减轻sql注入攻击。

答案 1 :(得分:0)

以下内容将查询EXEC('SELECT 1')发送到您的连接。

class MyClass {
  @Autowired
  public MyClass(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}