【问题标题】:Package fails because System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near 's'打包失败,因为 System.Data.SqlClient.SqlException (0x80131904): 's' 附近的语法不正确
【发布时间】:2019-09-12 21:42:09
【问题描述】:

我的包几天都很好,今天每当我尝试运行它时,它从文件夹中的第一个文件中传输了几列并且失败了。

我得到的错误是:

System.Data.SqlClient.SqlException (0x80131904):“s”附近的语法不正确。

字符串后的非右引号
'','C:\Users\svojnovic\Dropbox\test\2016-08-31 Race 3 Scale Sheet.csv')'。

我在脚本任务中的代码是:

SqlConnection myADONETConnection = new SqlConnection();
myADONETConnection = (SqlConnection)(Dts.Connections["DBConn"].AcquireConnection(Dts.Transaction) as SqlConnection);

// Writing Data of File Into Table
int counter = 0;
string line;
// MessageBox.Show(fileName);

System.IO.StreamReader SourceFile = new System.IO.StreamReader(fileName);

while ((line = SourceFile.ReadLine()) != null)
{
    if (counter > 0)
    {
         string query = "Insert into " + TableName + " Values ('";
         query += line.Replace(FileDelimiter, "','") + "','" + fileName.Replace(SourceFolderPath,"") + "')";

         MessageBox.Show(query.ToString());

         SqlCommand myCommand1 = new SqlCommand(query, myADONETConnection);
         myCommand1.ExecuteNonQuery();
     }

     counter++;
 }

 SourceFile.Close();

 // move the file to archive folder after adding datetime to it
 File.Move(fileName, ArchiveFolder + "\\" + (fileName.Replace(SourceFolderPath, "")).Replace(FileExtension, "") + "_" + datetime + FileExtension);
 Dts.TaskResult = (int)ScriptResults.Success;

【问题讨论】:

  • 该错误告诉您您的 SQL 代码的语法不正确。因此,您将要查看您的 SQL 代码。 query 的运行时值是多少?
  • TableNameFileDelimiterSourceFolderPath 中的一个或其他可能包含单引号。使用参数化查询。您将无法参数化TableName,但插入语句中的其他值应该是参数。您应该阅读 SQL 注入
  • 我建议阅读SqlCommand.Parameters Property 上的文档。修复注入问题,您遇到的问题就会消失。
  • 为什么要使用脚本任务?

标签: c# sql sql-server csv ssis


【解决方案1】:

为什么要在脚本任务中导入平面文件??

问题可以用不同的方式提出:如果您在脚本任务而不是数据流任务中导入平面文件,使用 SSIS 有什么好处?

您可以简单地添加数据流任务并使用平面文件源和 OLEDB 目标将数据从平面文件导入 SQL 表。另一方面这将消除连接SQL命令带来的SQL注入风险。


其他方法

(1) SQL 批量插入

(2) SQL 开放式设置

(3) C#参数化查询


有用的帖子

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2018-06-28
    • 2020-05-14
    • 2021-03-31
    • 2019-07-17
    • 2017-12-08
    • 2014-05-09
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多