У вас есть несколько вариантов от Microsoft: ADO.NET или Linq2Sql являются популярными в настоящее время. Но ссылка, которую вы упомянули, потребует большого количества работы для преобразования из генерации SQL в ORM.
Чтобы сделать создание SQL более простым и безопасным, вам следует рассмотреть возможность использования параметров SQL. Вот пример:
using (SqlCommand saveCommand = DbUtil.CreateSqlCommand(context.Transaction)) {
saveCommand.CommandText =
"INSERT INTO Hit (" +
"Id, PersonId, TeamId, PlayerId" +
") VALUES (" +
"@Id, @PersonId, @TeamId, @PlayerId" +
")";
DbUtil.AddParameter(saveCommand, "@Id", SqlDbType.UniqueIdentifier, Guid.NewGuid());
DbUtil.AddParameter(saveCommand, "@PersonId", SqlDbType.UniqueIdentifier, hit.PersonId);
DbUtil.AddParameter(saveCommand, "@TeamId", SqlDbType.UniqueIdentifier, hit.TeamId);
DbUtil.AddParameter(saveCommand, "@PlayerId", SqlDbType.UniqueIdentifier, hit.PlayerId);
saveCommand.ExecuteNonQuery();
}
Это отделит ваш список параметров от SQL. Также SQL мы будем гораздо более разборчивым. DbUtil в этом примере - это просто вспомогательная функция, которую я написал для создания моей команды sql из соединения или транзакции. Также как и в вашем sqlh.addValue, у меня есть DbUtil.AddParameter, который работает, принимая команду, имя переменной, тип данных и значение. Вот пример, включающий перегруженные методы:
internal static SqlParameter CreateSqlParameter(
string parameterName,
SqlDbType dbType,
ParameterDirection direction,
object value
) {
SqlParameter parameter = new SqlParameter(parameterName, dbType);
if (value == null) {
value = DBNull.Value;
}
parameter.Value = value;
parameter.Direction = direction;
return parameter;
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType
) {
return AddParameter(sqlCommand, parameterName, dbType, null);
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
object value
) {
return AddParameter(sqlCommand, parameterName, dbType, ParameterDirection.Input, value);
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
ParameterDirection direction,
object value
) {
SqlParameter parameter = CreateSqlParameter(parameterName, dbType, direction, value);
sqlCommand.Parameters.Add(parameter);
return parameter;
}
internal static SqlParameter AddParameter(
SqlCommand sqlCommand,
string parameterName,
SqlDbType dbType,
ParameterDirection direction
) {
SqlParameter parameter = CreateSqlParameter(parameterName, dbType, direction, null);
sqlCommand.Parameters.Add(parameter);
return parameter;
}