我正在使用c#(visual studio 2008)尝试访问Excel电子表格中的业务逻辑。
我有以下课程..(随意批评我是否做错了 - 我通常是java开发人员 - 这是我的第一个c#应用程序。)
public class SpreadSheetClass
{
// apologies for any typo's code written in place, not copied from an IDE...
//
public DataTable DoIt()
{
DataTable result;
String sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MySpreadsheet.xls;Extended Properties=Excel 8.0;";
OleDbConnection connection = new OleDbConnection(sConnection);
try
{
connection.Open();
OleDbCommand oleDbcCommand = new OleDbCommand("SELECT * FROM SELECTION", connection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = oleDbcCommand;
result = new DataTable();
dataAdapter.Fill(result);
}
finally
{
connection.Close();
}
return result;
}
}
我使用Add - >将电子表格添加到项目中现有项目 - >然后选择.xls文件。然后我编辑了文件的属性,说它是一个嵌入式资源,并将它总是复制到输出目录。
我可以在项目中很好地访问电子表格。
但是,我想从项目外部运行DoIt方法,例如从Test Project运行,我得到以下异常:
“测试方法TestProject1.UnitTest1.TestMethod1抛出异常:System.Data.OleDb.OleDbException:Microsoft Jet数据库引擎找不到对象'SELECTION'。确保对象存在并且拼写其名称和路径名字正确..“
我确信我的问题与调用从另一个项目访问资源的类有关。
帮助!
答案 0 :(得分:1)
在.NET中(特别是在C#中)最好“包装”在IDisposable
语句中实现using
的类:
using(OleDbConnection connection = new OleDbConnection(sConnection))
{
// ...
}
您基本上要做的是从程序集中提取资源(请参阅Assembly.GetManifestResourceStream()
),将其保留在磁盘上,然后相应地更改连接字符串。
答案 1 :(得分:0)
我使用Add - >将电子表格添加到项目中现有项目 - >然后选择.xls文件。然后我编辑了文件的属性,说它是一个嵌入式资源,并将它总是复制到输出目录。
我可以在项目中很好地访问电子表格。
您将另一个程序作为程序集打开,然后从中加载资源。
类似的东西:
Assembly other = Assembly.Load(name);
Stream xlsData = other.GetManifestResourceStream(resourceName);