【发布时间】: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的运行时值是多少? -
TableName、FileDelimiter或SourceFolderPath中的一个或其他可能包含单引号。使用参数化查询。您将无法参数化TableName,但插入语句中的其他值应该是参数。您应该阅读 SQL 注入 -
我建议阅读SqlCommand.Parameters Property 上的文档。修复注入问题,您遇到的问题就会消失。
-
为什么要使用脚本任务?
标签: c# sql sql-server csv ssis