2010-05-14 23 views
0

沒有企業數據庫中的代碼,我使用下面的代碼中插入一些東西DB和讀取返回值從企業庫重寫,以保存數據並返回值

int result = 0; 
using (SqlConnection myConnection = 
    new SqlConnection(AppConfiguration.ConnectionString)) 
{ 
    SqlCommand myCommand = new SqlCommand("SaveUser", myConnection); 
    myCommand.CommandType = CommandType.StoredProcedure; 
    myCommand.Parameters.AddWithValue("@location", objUser.Location); 

    DbParameter returnValue; 
    returnValue = myCommand.CreateParameter(); 
    returnValue.Direction = ParameterDirection.ReturnValue; 
    myCommand.Parameters.Add(returnValue); 

    myConnection.Open(); 
    myCommand.ExecuteNonQuery(); 
    result = Convert.ToInt32(returnValue.Value); 
    myConnection.Close(); 
} 

我該怎麼辦了在企業數據庫中是一樣的嗎?我想從正在調用的存儲過程中返回值。

回答

1

你可以嘗試以類似的方式做到這一點。應該在配置文件中定義「YourDb」。

int result = 0; 

Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("YourDb"); 
DbCommand myCommand = db.GetStoredProcCommand("SaveUser"); 
db.AddInParameter(myCommand, "location", DbType.String, objUser.Location); 
db.ExecuteNonQuery(myCommand); 
result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue")); 
+0

不適用於我。當我嘗試獲取「returnValue」參數的值時,拋出IndexOutOfRangeException。 – HiveHicks 2011-07-26 12:29:37

+0

這被標記爲答案,但你有沒有得到這個工作?我正在做類似的事情,但試圖檢索一個out參數。這是我的問題:http://stackoverflow.com/questions/39985999/microsoft-practices-enterpriselibrary-data-database-addout-parameter-not-getting – ptn77 2016-10-21 17:17:04

0

可以使用的ExecuteNonQuery過載縮短:

Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>("YourDb"); 
db.ExecuteNonQuery("SaveUser", objUser.Location); 
int result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue")); 

其中SaveUser是PROC名稱和objUser.Location是輸入參數

0

您必須添加回參數執行查詢之前的命令對象。

db.AddParameter(myCommand, "returnvalue", DbType.String, ParameterDirection.ReturnValue, null, DataRowVersion.Default, null); 

--Execute the query here using ExecuteNonQuery 

result = Convert.ToInt32(db.GetParameterValue(myCommand, "returnValue"));