Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用C#脚本将记录复制到Excel之前,尝试从csv文件的行中转义单个引号_C#_Excel - Fatal编程技术网

在使用C#脚本将记录复制到Excel之前,尝试从csv文件的行中转义单个引号

在使用C#脚本将记录复制到Excel之前,尝试从csv文件的行中转义单个引号,c#,excel,C#,Excel,在SSIS包中,我尝试将.CSV文件的内容写入.XLS文件,因为Excel连接管理器工作不正常,但在尝试通过下面的C#脚本完成此操作时出现问题 只是澄清一点,我不是在数据库中插入记录,而是在EXCEL文件中插入记录 任何帮助/指导都将不胜感激。谢谢 如果我在创建.CSV文件的SQL代码中执行替换函数来删除单引号并再次运行C#代码,则问题已得到解决,但此excel文件的管理员希望它出现在那里,我希望修复代码以提供此功能 我在执行代码时遇到此错误: System.Data.OleDb.OleDbEx

在SSIS包中,我尝试将.CSV文件的内容写入.XLS文件,因为Excel连接管理器工作不正常,但在尝试通过下面的C#脚本完成此操作时出现问题

只是澄清一点,我不是在数据库中插入记录,而是在EXCEL文件中插入记录

任何帮助/指导都将不胜感激。谢谢

如果我在创建.CSV文件的SQL代码中执行替换函数来删除单引号并再次运行C#代码,则问题已得到解决,但此excel文件的管理员希望它出现在那里,我希望修复代码以提供此功能

我在执行代码时遇到此错误:

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("'", "''");