2010-01-27 80 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