Я большой поклонник того, чтобы компьютеры делали рутинную, повторяющуюся работу.Они очень хороши в этом.Я только должен научить их делать это один раз.Поэтому я написал генератор кода, который использует справочную базу данных для генерации строго типизированного кода доступа.Преимущество этого метода заключается в том, что если вы изменяете сигнатуры хранимой процедуры, все, что вам нужно сделать, - это повторно создать уровень доступа к данным.Любые критические изменения приведут к ошибкам компиляции.
Код, который я написал, читает XML-файл, идентифицирующий хранимые процедуры, представляющие интерес, и получает их метаданные из указанных справочных баз данных.
XMLфайл содержит флаги, определяющие, возвращает ли каждая хранимая процедура
- несколько наборов результатов (набор данных)
- один набор результатов (данные)
- одна строка (дата)
- одна строка с одним столбцом (скалярное значение)
- DataReader
- XmlReader
- или ничего (без запроса)
Исходя из этого, он генерирует соответствующий код, 1 класс на хранимую процедуру.Сгенерированный код обеспечивает доступ к коду возврата хранимой процедуры, а также к возвращаемому значению для любых выходных параметров.
Он также анализирует объявление для хранимой процедуры в исходном коде хранимой процедуры, чтобы определить любые необязательные аргументы (те,со значениями по умолчанию): сгенерированный код позволяет исключить их при вызове для выполнения хранимой процедуры.
Вызов сгенерированного кода происходит следующим образом:
public DataTable GetRiskFactorsForPatient( int patientID )
{
dbo_GetRiskbyPatient sp = new dbo_GetRiskbyPatient( CONNECT_STRING_ID ) ;
int rc = sp.Exec( patientID ) ;
DataTable dt = sp.ResultSet ;
if ( dt == null ) throw new InvalidOperationException( "nothing returned from stored procedure" ) ;
return dt ;
}