2010-01-27 89 views
0

我有一个WCF服务,需要在成功执行其中一个方法后插入到SQL 2005日志表中。使用EnterpriseLibrary插入到SQL表中?

使用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

如果你打算在存储过程中放入一堆逻辑,那么是的,一个存储过程就是要走的路。

从事物的安全性方面来说,存储过程总是更好,因为应用程序不能直接访问表,所以如果有一种方法可以通过参数化,那么你仍然无法访问表数据。

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

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

请记住,我是DBA,我可能会被某些开发人员抨击说你应该使用存储过程。

+0

在这种情况下,它只是直接插入到日志表中,所以在这里没有繁重的业务逻辑,但是您建议的是合理的建议。 – 2010-01-28 13:47:38