【问题标题】:Update Excel file using C# and OLEDB - Network file issue使用 C# 和 OLEDB 更新 Excel 文件 - 网络文件问题
【发布时间】:2014-05-30 13:51:30
【问题描述】:

我没有很多使用 C# 处理 Excel 的经验。我不得不用谷歌搜索很多技术,但运气不错。导致我在这里的原因是我在尝试升级公司网络上的 Excel 文件时遇到的问题。我在本地驱动器上升级 Excel 文件没有任何问题,但是当它被定向到网络上的文件时,它失败并显示“Microsoft Jet 数据库引擎找不到对象 '\\nas1\eng\legacy\XView_Results \Book1-xview-test.xlsx'。确保对象存在,并且正确拼写它的名称和路径名。"

我尝试将路径字符串更改为具有四个斜杠和两个斜杠。 “\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx” 但它失败了,解释为: \\nas1\eng\legacy\XView_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;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';" ); 但是得到这个错误: '\nas1\eng\legacy\XView_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());
        //}
    }

【问题讨论】:

  • 你能在本地复制一份excel文件,然后在那里运行你的代码吗?如果这行得通..你知道这只是一个网络问题。
  • 是的,我已经提到它在我的本地驱动器上工作正常,但在网络上失败。
  • 我喜欢使用OleDbConnectionStringBuilder 来帮助建立我的连接字符串。它有助于减少语法错误。
  • 谢谢@S.Ahn,我正在看。我注意到在其中一个示例中使用 IP 地址引用网络!

标签: c# excel visual-studio-2010 visual-studio


【解决方案1】:

尝试一条超级斜线。

"\\\\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;Data Source='" + FileName + "';Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';");

注意单引号包含来包裹“FileName”的值。

【讨论】:

  • 我也有同样的想法并尝试过,但仍然失败。奇怪的是,错误消息显示的路径带有三个斜杠和一个斜杠:“\\\server\mynet\folder1\folder2\coolfile.xlsx”。还在挠头!查看第一个注释掉的 MyConnection。
  • 对不起,我应该更仔细地阅读。我对我的回复进行了编辑,关于“@”的事情。
  • 没关系@granadaCoder。
  • 检查我刚刚添加到答案中的单引号提示。
  • 我认为你的想法有道理,所以我试了一下。不幸的是它失败了。这是错误消息:'\\nas1\eng\legacy\XView_Results\Book1-xview-test.xlsx' 不是有效路径。确保路径名拼写正确,并且您已连接到文件所在的服务器。我已经检查了路径的拼写和有效性,它应该可以工作!
【解决方案2】:

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

这里是固定代码:

        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());
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多