Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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#和OLEDB更新Excel文件-网络文件问题_C#_Excel_Visual Studio 2010_Visual Studio - Fatal编程技术网

使用C#和OLEDB更新Excel文件-网络文件问题

使用C#和OLEDB更新Excel文件-网络文件问题,c#,excel,visual-studio-2010,visual-studio,C#,Excel,Visual Studio 2010,Visual Studio,我没有很多使用C#处理Excel的经验。我用谷歌搜索了很多技术,但运气不错。我在升级公司网络上的Excel文件时遇到了一个问题。我在升级本地驱动器上的Excel文件时没有遇到任何问题,但是当它被定向到网络上的文件时,它会失败,“Microsoft Jet数据库引擎无法找到对象”\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”。请确保该对象存在,并且正确拼写其名称和路径名。” 我尝试将路径字符串更改为四个斜杠和两个斜杠。 “\\nas

我没有很多使用C#处理Excel的经验。我用谷歌搜索了很多技术,但运气不错。我在升级公司网络上的Excel文件时遇到了一个问题。我在升级本地驱动器上的Excel文件时没有遇到任何问题,但是当它被定向到网络上的文件时,它会失败,“Microsoft Jet数据库引擎无法找到对象”\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”。请确保该对象存在,并且正确拼写其名称和路径名。”

我尝试将路径字符串更改为四个斜杠和两个斜杠。 “\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx” 但它失败了,解释为: \\nas1\eng\legacy\XView\u Results\Book1-XView-test.xlsx (注意:stackoverflow不会显示我的四斜杠和两斜杠)

我试着用C#技巧来@ 字符串文件名=@“\nas1\eng\legacy\XView_Results\Book1 XView test.xlsx”; 并将命令更改为: MyConnection=new System.Data.OleDb.OleDbConnection(@“provider=Microsoft.Jet.OleDb.4.0;数据源=“+FileName+”;扩展属性='Excel 8.0;HDR=YES;IMEX=1;';'); 但是得到这个错误: “\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”不是有效路径。确保路径名拼写正确,并且已连接到文件所在的服务器

任何想法都将不胜感激

下面是失败例程的代码:

  private void buttonSendToExcel_Click(object sender, EventArgs e)
    {
        //try
        //{
            string FileName = @"\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
            System.Data.OleDb.OleDbConnection MyConnection;
            System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
            string sql = null;
            string sql2 = null;
            string sql3 = null;
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\\nas1\\eng\\legacy\\XView_Results\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\nas1\\eng\\legacy\\XView_Results\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            MyConnection.Open();
            myCommand.Connection = MyConnection;

            sql = "Update [Sheet1$] set result=" + od + " where id=1";
            myCommand.CommandText = sql;
            myCommand.ExecuteNonQuery();

            sql2 = "Update [Sheet1$] set result=" + id + " where id=2";
            myCommand.CommandText = sql2;
            myCommand.ExecuteNonQuery();

            sql3 = "Update [Sheet1$] set result=" + yield + " where id=3";
            myCommand.CommandText = sql3;
            myCommand.ExecuteNonQuery();

            MyConnection.Close();
        //}
        //catch (Exception ex)
        //{
        //    MessageBox.Show(ex.ToString());
        //}
    }

尝试一个超级斜切路径

"\\\\Server\\MyNetworkDrive\\FolderOne\\FolderTwo\\MySuperCoolFile.xlsx"


@"\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx"; 
应该是这样吗

@"\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx"; 
其他想法

在文件名周围加上单引号。实际上,我在每个“值”周围都加了单引号。为了保持一致

例如:

(@“provider=Microsoft.Jet.OLEDB.4.0;数据源=”“+FileName+”;扩展属性=”Excel 8.0;HDR=YES;IMEX=1;“;”)


请注意,单引号include用于包装“FileName”的值。

为了解决问题,我的代码中更改了两件事。 1.将路径切换到映射模式,即映射到H:\file的\server\file 2.移除组件IMEX=1;来自MyConnection

以下是固定代码:

        try
        {            
            //string FileName = @"\\tiwnas1\eng\legacy\XView_Results\Book1-xview-test.xlsx";
            //string theFile = GetPath(@"\\tiwnas1\eng\legacy\Book1-xview-test_v8.xls");
            //string FileName = @"\\tiwnas1\eng\legacy\Book1-xview-test_v8.xls";

            System.Data.OleDb.OleDbConnection MyConnection;
            System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
            string sql = null;
            string sql2 = null;
            string sql3 = null;
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\\\tiwnas1\\eng\\legacy\\XView_Results\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='\\tiwnas1\eng\legacy\XView_Results\Book1-xview-test.xlsx';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='H:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='h:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='h:\\Book1-xview-test_v8.xls';Extended Properties='Excel 8.0;HDR=YES;';");
            //MyConnection = new System.Data.OleDb.OleDbConnection(@"provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + FileName + "';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");
            MyConnection.Open();
            myCommand.Connection = MyConnection;

            //sql = "Update [Sheet1$] set result=5.625 where id=1";
            sql = "Update [Sheet1$] set result=" + od + " where id=1";
            myCommand.CommandText = sql;
            myCommand.ExecuteNonQuery();

            //sql2 = "Update [Sheet1$] set result=5.375 where id=2";
            sql2 = "Update [Sheet1$] set result=" + id + " where id=2";
            myCommand.CommandText = sql2;
            myCommand.ExecuteNonQuery();

            //sql3 = "Update [Sheet1$] set result=110000 where id=3";
            sql3 = "Update [Sheet1$] set result=" + yield + " where id=3";
            myCommand.CommandText = sql3;
            myCommand.ExecuteNonQuery();

            MyConnection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

您可以制作excel文件的本地副本,并在那里运行代码吗。如果可以的话..你知道这只是一个网络问题。是的,我说过它在本地驱动器上可以正常工作,但在网络上出现故障。我喜欢使用
OleDbConnectionStringBuilder
来帮助构建连接字符串。这有助于减少语法错误。谢谢@S.Ahn,我正在查看。在其中一个例子中,我注意到网络被引用为IP地址!我也这么想,试了试,结果还是失败了。奇怪的是,错误消息显示了带有三个斜杠和一个斜杠的路径:“\\\server\mynet\folder1\folder2\coolfile.xlsx”。还在抓我的头!请看第一个注释掉的MyConnection。对不起,我应该仔细阅读。我对我的回答进行了编辑,关于“@”的事情。没关系@granadaCoder。检查我的单引号提示,我刚刚添加到我的答案中。我认为你的想法有道理,所以我尝试了一下。不幸的是,它失败了。以下是错误消息:“\\nas1\eng\legacy\XView\u Results\Book1 XView test.xlsx”不是有效路径。确保路径名拼写正确,并且已连接到文件所在的服务器。我已经检查了路径的拼写和有效性,它应该是有效的!