在使用C#脚本将记录复制到Excel之前,尝试从csv文件的行中转义单个引号
在SSIS包中,我尝试将.CSV文件的内容写入.XLS文件,因为Excel连接管理器工作不正常,但在尝试通过下面的C#脚本完成此操作时出现问题 只是澄清一点,我不是在数据库中插入记录,而是在EXCEL文件中插入记录 任何帮助/指导都将不胜感激。谢谢 如果我在创建.CSV文件的SQL代码中执行替换函数来删除单引号并再次运行C#代码,则问题已得到解决,但此excel文件的管理员希望它出现在那里,我希望修复代码以提供此功能 我在执行代码时遇到此错误:在使用C#脚本将记录复制到Excel之前,尝试从csv文件的行中转义单个引号,c#,excel,C#,Excel,在SSIS包中,我尝试将.CSV文件的内容写入.XLS文件,因为Excel连接管理器工作不正常,但在尝试通过下面的C#脚本完成此操作时出现问题 只是澄清一点,我不是在数据库中插入记录,而是在EXCEL文件中插入记录 任何帮助/指导都将不胜感激。谢谢 如果我在创建.CSV文件的SQL代码中执行替换函数来删除单引号并再次运行C#代码,则问题已得到解决,但此excel文件的管理员希望它出现在那里,我希望修复代码以提供此功能 我在执行代码时遇到此错误: System.Data.OleDb.OleDbEx
System.Data.OleDb.OleDbException (0x80040E14): Syntax error (missing
operator) in query expression ''SAM'S/COSTCO - RETAIL/CONSUMAB')'.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
at ST_3c46305a87ab4837b1d2cd33ee47f34c.ScriptMain.Main()
在下面的代码中,我尝试在下面WHILE循环的第一行之前插入以下内容:
行=行。替换(“'”,“\”)
下面是我正在使用的C#脚本代码:
try
{
//Declare Variables
string SourceFolderPath = Dts.Variables["User::SourceFolderPath"].Value.ToString();
string DestinationFolderPath = Dts.Variables["User::DestinationFolderPath"].Value.ToString();
string FileExtension = Dts.Variables["User::FileExtension"].Value.ToString();
string FileDelimiter = Dts.Variables["User::FileDelimiter"].Value.ToString();
string CreateTableStatement = "";
string ColumnList = "";
//Reading file names one by one
string SourceDirectory = SourceFolderPath;
string[] fileEntries = Directory.GetFiles(SourceDirectory, "*" + FileExtension);
foreach (string fileName in fileEntries)
{
// do something with fileName
//MessageBox.Show(fileName);
//Read first line(Header) and prepare Create Statement for Excel Sheet
System.IO.StreamReader file = new System.IO.StreamReader(fileName);
string filenameonly = (((fileName.Replace(SourceDirectory, "")).Replace(FileExtension, "")).Replace("\\", ""));
CreateTableStatement = (" Create Table [" + filenameonly + "] ([" + file.ReadLine().Replace(FileDelimiter, "] Text,[")) + "] Text)";
file.Close();
//MessageBox.Show(CreateTableStatement.ToString());
//Construct ConnectionString for Excel
//string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + DestinationFolderPath + "\\" + filenameonly
// + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES;\"";
string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + DestinationFolderPath + "\\" + filenameonly + ";" + "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=0\"";
OleDbConnection Excel_OLE_Con = new OleDbConnection();
OleDbCommand Excel_OLE_Cmd = new OleDbCommand();
//drop Excel file if exists
File.Delete(DestinationFolderPath + "\\" + filenameonly + ".xls");
Excel_OLE_Con.ConnectionString = connstring;
Excel_OLE_Con.Open();
Excel_OLE_Cmd.Connection = Excel_OLE_Con;
//Use OLE DB Connection and Create Excel Sheet
Excel_OLE_Cmd.CommandText = CreateTableStatement;
Excel_OLE_Cmd.ExecuteNonQuery();
//Writing Data of File to Excel Sheet in Excel File
int counter = 0;
string line;
System.IO.StreamReader SourceFile = new System.IO.StreamReader(fileName);
while ((line = SourceFile.ReadLine()) != null)
{
if (counter == 0)
{
ColumnList = "[" + line.Replace(FileDelimiter, "],[") + "]";
}
else
{
string query = "Insert into [" + filenameonly + "] (" + ColumnList + ") VALUES('" + line.Replace(FileDelimiter, "','") + "')";
// MessageBox.Show(query.ToString());
var command = query;
Excel_OLE_Cmd.CommandText = command;
Excel_OLE_Cmd.ExecuteNonQuery();
}
counter++;
}
Excel_OLE_Con.Close();
SourceFile.Close();
Dts.TaskResult = (int)ScriptResults.Success;
}
}
catch (Exception exception)
{
// Create Log File for Errors
using (StreamWriter sw = File.CreateText(Dts.Variables["User::DestinationFolderPath"].Value.ToString() + "\\" + "ErrorLog_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".log"))
{
sw.WriteLine(exception.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
Dts.TaskResult = (int)ScriptResults.Success;
除非我完全弄错了,否则这应该对你有用。谢谢你的快速回复。不幸的是,我得到了同样的错误。当创建CSV文件导入Excel时,我通常用双引号将文本括起来。这解决了大多数类似的问题。这对你有用吗?我也试过了,但还是失败了,还是出了同样的错误。雷斯林,当我尝试你的建议时,我有一个语法错误,在我修正它之后,我成功了。我感谢你的帮助和时间!嗨,Raithlin,你没有我运行代码时的语法错误。谢谢。对于大多数问题,即使SQL值与特殊字符xyz相关,也只有一个答案:使用!编辑您的问题和添加执行的查询的可能重复…关于编辑:您的终点是excel文件而不是数据库并不重要。重要的是你们使用OleDb作为中间技术,据我所知,它支持参数。
line = line.REPLACE("'", "''");