[英]Update Excel file using C# and OLEDB - Network file issue
我没有很多使用C#与Excel结合使用的经验。 我不得不用Google搜索很多技巧,但是运气很好。 导致我出现此问题的是我尝试在公司网络上升级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#技术与@字符串FileName = @“ \\ nas1 \\ eng \\ legacy \\ XView_Results \\ Book1-xview-test.xlsx”一起使用; 并将命令更改为:MyConnection = new System.Data.OleDb.OleDbConnection(@“ provider = Microsoft.Jet.OLEDB.4.0; Data Source =” + FileName +“;扩展属性='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());
//}
}
尝试一条超级大路。
"\\\\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 +“';扩展属性='Excel 8.0; HDR = YES; IMEX = 1;';”);
请注意,单引号包括将“ FileName”的值包装起来。
为了解决我的问题,我的代码中进行了两处更改。 1.将路径切换到映射模式,即\\ server \\ file映射到H:\\ 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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.