Это - довольно большой вопрос.
LDAP является протоколом для доступа к каталогу. Каталог содержит объекты; обычно связанные с пользователями, группами, компьютерами, принтерами и так далее; информация о структуре компании (хотя откровенно можно расширить его и сохранить что-либо там).
LDAP дает Вам методы запроса добавить, обновить и удалить объекты в рамках каталога (и набор больше, но это - центральные).
то, Что не делает LDAP, обеспечивают базу данных; база данных обеспечивает доступ LDAP к себе, не наоборот. Это намного больше, чем подписано.
Было несколько библиотек, которые были выделены разными пользователями, что позволяло реализовать требуемые функции. Я перечислил их здесь, и некоторые из них были оценены, поэтому, где это уместно, я попытался оставить интересные комментарии для их сравнения. Детали, которые я включил, полностью основаны на мнении, Также получил быстрый ответ на технический вопрос от службы поддержки. Наверное, мой выбор из всех.)
SyncFusion BackOffice
(Средняя стоимость и разумная структура. К сожалению, при выполнении модульных тестов возникли большие трудности с реализацией и противоречивые результаты. Также получил ряд «Попытка прочитать защищенную память») ошибки, которые не вдохновляли меня с чисто управляемой библиотекой.)
Раньше я использовал ADO.NET для получения данных из xls. Я не уверен, что все типы документов Excel будут поддерживаться, но посмотрите Чтение и запись электронных таблиц Excel с использованием ADO.NET C # DbProviderFactory
Вот также некоторый код из вопроса SO.
Я мог читать и писать в Excel без установки Office или каких-либо сторонних инструментов.
Excel.
После многих лет попыток помешать людям использовать Excel на сервере, они отказались / приняли рыночные потребности и начали поддерживать их.
В 2007 есть некоторые улучшения для этого, а в Excel 2010 предполагается еще больше.
Вот что-то, что может читать файлы .xls и xlsx. Это открытый исходный код. http://code.google.com/p/excelmapper/ .
По сути, это ORM, поэтому вам нужно иметь дело только с объектами, а не с OleDB.
Я не уверен, почему объявление о SO не имеет отношения к вашему вопросу.
Есть нечто подобное, называемое службами Excel от Майкрософт. Я полагаю, это позволяет вам использовать Excel в стиле веб-сервиса. Я думаю, что SpreadSheetGear - это то, что Microsoft использовала в качестве рекламы, используемой для отображения. :)
Чтобы читать файлы Excel с помощью C # без установки Excel, вы можете использовать POI Apache.
Это java-библиотека для чтения и записи форматов MS Office. Поскольку это java, а вы используете C #, вам понадобятся IKVM и классы java из POI Project .
Однако самый простой способ - просто загрузить Jon Iles excelent Проект MPXJ , и у вас есть все. Просто установите ссылку на IKVM.OpendJDK.ClassLibrary.dll
, IKVM.Runtime.dll
, poi-3.2-FINAL-20081019.dll
Я взломал вместе это быстрое консольное приложение, чтобы показать вам простой способ чтения листа Excel .xls. Он считывает только первый лист и не использует итераторы строк или ячеек, но выполняет свою работу хорошо.
NB: вам нужно посмотреть org. apache.poi.ss
, чтобы убедиться, что вы можете читать файлы .xlsx
и т. д.
//C# code for using the Apache POI libraries
using System;
using System.Collections.Generic;
using System.Text;
// poi for xls
using org.apache.poi;
using org.apache.poi.poifs;
using org.apache.poi.poifs.filesystem;
using org.apache.poi.hssf;
using org.apache.poi.hssf.usermodel;
using org.apache.poi.ss;
namespace ConsoleApplication1
{
class Test
{
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.Out.WriteLine("Usage: XLSReadTest <xls file>");
}
else
{
XLSRead x = new XLSRead();
x.Process(args[0]);
//x.Process("c:\\temp\\testfile.xls");
}
}
}
class XLSRead
{
public void Process(string inputFile)
{
int r = 0;
Console.Out.WriteLine("Reading input file started.");
DateTime start = DateTime.Now;
java.io.InputStream inputStream = new java.io.FileInputStream(inputFile);
POIFSFileSystem fs = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sh = wb.getSheetAt(0);
r = sh.getFirstRowNum();
while (r <= sh.getLastRowNum())
{
HSSFRow row = sh.getRow(r);
int c = row.getFirstCellNum();
string val = "";
while (c < row.getLastCellNum())
{
HSSFCell cell = row.getCell(c);
switch(cell.getCellType())
{
case HSSFCell.CELL_TYPE_NUMERIC:
val = cell.getNumericCellValue().ToString();
break;
case HSSFCell.CELL_TYPE_STRING:
val = cell.getStringCellValue();
break;
}
Console.Out.WriteLine("Row: " + r + ", Cell: " + c + " = " + val);
c++;
}
r++;
}
long elapsed = DateTime.Now.Ticks - start.Ticks;
String seconds = String.Format("{0:n}", elapsed / 1000000);
Console.Out.WriteLine("\r\n\r\nReading input file completed in " + seconds + "s." + "\r\n");
}
}
}