使用EnterpriseLibrary插入SQL表?

时间:2010-01-27 22:23:23

标签: sql-server logging enterprise-library

我有一个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 个答案:

答案 0 :(得分:1)

如果你计划在存储过程中放入一堆逻辑,那么存储过程将是你的方法。

从安全方面来看,存储过程总是更好,因为应用程序没有直接访问表,所以如果有办法通过参数化,那么你仍然无法访问表数据

换句话说,是的,使用存储过程。

EF,Link等也存在执行计划缓存问题,因为它们没有声明参数与列的大小相同,因此对于每个可能的字符串长度,最终会得到一个单独的执行计划。

请记住,我是一名DBA,我可能会被一些开发人员鞭打,说你应该使用存储过程。