Вставить в таблицу SQL с помощью EnterpriseLibrary? - PullRequest
0 голосов
/ 28 января 2010

У меня есть служба WCF, которую необходимо успешно вставить в таблицу журнала SQL 2005 после успешного выполнения одного из ее методов.

Используя EnterpriseLibrary, я нашел пример кода, похожего на этот:

public static void SaveActivity(string sSomeString)
{
    Database db = DatabaseFactory.CreateDatabase();

    string sInsert = @"INSERT INTO ActivityTable (SomeString) VALUES @SomeString";

    DbCommand dbInsert = (DbCommand)db.ExecuteScalar(sInsert);

    db.AddInParameter(dbInsert, "SomeString", DbType.String, sSomeString;
}

С этим кодом входной параметр не будет проигнорирован, так как он определен после метода ExecuteScalar ?!

Наконец, с учетом передового опыта, вместо того, чтобы делать INSERT, я должен создать сохраненный процесс и передать ему параметры?

1 Ответ

1 голос
/ 28 января 2010

Если вы планируете помещать кучу логики в хранимую процедуру, тогда да, хранимый процесс будет подходящим вариантом.

С точки зрения безопасности, хранимые процедуры всегда лучше, потому что приложение не имеет прямого доступа к таблице, поэтому, если есть способ обойти параметризацию, вы все равно не сможете получить доступ к таблице. данные.

Другими словами, да, используйте сохраненный процесс.

Существуют также проблемы с кэшем плана выполнения для EF, Link и т. Д., Поскольку они не объявляют параметр того же размера, что и столбец, поэтому для каждой возможной длины строки вы получаете отдельный план выполнения.

Имейте в виду, что я - администратор баз данных, и некоторые разработчики, вероятно, будут выпороть меня за то, что вы должны использовать хранимый процесс.

...