Доступ к ресурсу Excel в другом проекте c # - PullRequest
1 голос
/ 14 апреля 2009

Я использую 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 -> Existing Item ->, затем выбрал файл .xls. Затем я отредактировал свойства файла, указав, что это встроенный ресурс, и всегда копировал его в выходной каталог.

Я могу получить доступ к электронной таблице изнутри проекта.

Однако я хочу запустить метод DoIt извне проекта, например, из тестового проекта, я получаю следующее исключение:

"Тестовый метод TestProject1.UnitTest1.TestMethod1 вызвал исключение: System.Data.OleDb.OleDbException: ядру базы данных Microsoft Jet не удалось найти объект« ВЫБОР ». Убедитесь, что объект существует, и что вы записали его имя и путь назови правильно .. "

Я уверен, что моя проблема связана с вызовом класса, который обращается к ресурсу из другого проекта.

Помощь!

Ответы [ 2 ]

1 голос
/ 14 апреля 2009

В .NET (особенно в C #) лучше "обернуть" классы, которые реализуют IDisposable в using операторах:

using(OleDbConnection connection = new OleDbConnection(sConnection))
{
    // ...
}

Что вам в основном нужно сделать, это извлечь ресурс из сборки (см. Assembly.GetManifestResourceStream()), сохранить его на диске и затем соответствующим образом изменить строку подключения.

0 голосов
/ 14 апреля 2009

Я добавил электронную таблицу в проект, используя Add -> Existing Item ->, затем выбрал файл .xls. Затем я отредактировал свойства файла, указав, что это встроенный ресурс, и всегда копировал его в выходной каталог.

Я могу получить доступ к электронной таблице изнутри проекта.

Вы открываете другую программу как сборку, а затем загружаете из нее ресурсы.

Что-то вроде:

Assembly other = Assembly.Load(name);
Stream xlsData = other.GetManifestResourceStream(resourceName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...