Я ищу способ записать SQL-оператор в C#, предназначающемся для различных поставщиков. Типичным примером дифференциации SQL-операторов является ПРЕДЕЛ в PostgreSQL по сравнению с TOP в MSSQL.
Единственный путь состоит в том, чтобы решить синтаксис SQL как два выше для записи операторов "if", в зависимости от которого поставщика пользователь выбирает, или использующий операторы выгоды попытки в качестве управления потоком (ПРЕДЕЛ не работал, я попробую TOP вместо этого)? Я видел, что LINQ Берет метод, но я задаюсь вопросом, можно ли сделать это без LINQ?
Другими словами, C# имеет некоторый универсальный класс Поставщика SQL, что мне не удалось найти, что это может использоваться?
Entity Framework может работать с разными базами данных. Это позволит вам писать операторы LINQ, которые будут работать с обеими базами данных. Вам нужно будет найти поставщика postgresql для Entity Framework. Есть несколько вариантов на выбор.
Надеюсь, это поможет.
Присоединяюсь к идее Марка Тидда. Если вы не хотите Linq, создайте отдельные классы DAL для каждого провайдера, или используйте хранимые процедуры, которые будут реализованы в каждой БД.
Я не думаю, что существует «универсальный поставщик sql».
В нашем магазине нам необходимо поддерживать как DB2, так и SQL Server, поэтому мы решили реализовать шаблон слоев, создающий классы модели, доступа к данным и бизнес-логики. Уровень доступа к данным обрабатывает соединение с различными СУБД и загружает классы модели, передавая их обратно в бизнес-логику. Бизнес-логика и классы модели не знают, откуда уровень доступа к данным получает данные.
Различия в SQL обрабатываются, поскольку уровень доступа к данным вызывает хранимые процедуры в базе данных. У нас есть хранимые процедуры, реализованные с соответствующим синтаксисом в обеих системах.Если нам нужно перейти в другую базу данных, все, что нам нужно сделать, это реализовать необходимые процедуры в новых СУБД, и все должно просто работать.
Есть DBLinq :
LINQ-провайдер для Oracle, PostgreSQL, MySQL, Ingres, SQLite, Firebird и ... SQL Server (C # 3.0)
При создании запроса с использованием LINQ в SQL можно просмотреть сгенерированный SQL и сохранить его.
Однако это не соответствует вашему требованию «без использования LINQ». Если у вас есть LINQ, почему бы не использовать его?