2016-10-28 54 views
-1

我所有我有這種常用的方法,我主要用於插入和從數據庫中獲取數據。但現在我遇到了一個問題,當有一個輸出值時,我需要創建一個新的方法,它接受並輸出我的db查詢中輸出變量的返回值。我聽說你可以像這樣使用它。如何使用c#獲取帶有返回參數的數據?

cmd.Parameters.Add("@new_id", SqlDbType.Int).Direction = ParameterDirection.Output;

但我怎麼改變這種代碼的常用方法。

這是我常見的方法代碼。

​​

如何修改上述代碼以獲取輸出變量?非常感謝幫助。同樣在db查詢中,返回值是一個int。

+0

通過使用'ParameterDirection.Output',你可以得到插入的行ID(如果你已經指定了行ID,可以說是主鍵) –

回答

0

自從我問這個問題幾個星期過去了,我想我會回答這個問題,因爲我從同事那裏得到了最好的解決方案。您可能想要創建一個新的常見泛型方法,如問題中的泛型方法,但輸出結果爲ParameterDirection。所以這是我的答案。

public int ExecuteNonQueryWithOutputParamInt(string spName, Dictionary<string, string> parms, Dictionary<string, object> oParam = null) 
     { 
      string key = null; 
      try 
      { 
       SqlCommand cmd = new SqlCommand(); 
       cmd.Connection = con; 
       cmd.CommandType = CommandType.StoredProcedure; 
       cmd.CommandText = spName; 

       foreach (var para in parms) 
       { 
        cmd.Parameters.AddWithValue(para.Key, para.Value); 
       } 


       if (oParam != null) 
       { 

        foreach (var p in oParam) 
        { 
         cmd.Parameters.AddWithValue(p.Key, p.Value).Direction = ParameterDirection.Output; 
         key = p.Key; 
        } 
       } 
        this.OpenConnection(); 
        cmd.ExecuteNonQuery(); 
        int returnValue = Convert.ToInt32(cmd.Parameters[key].Value); 
        this.CloseConnection(); 
        return returnValue; 


      } 
      catch (Exception ex) 
      { 
       ex.Message.ToString(); 
       return 0; 
      } 
     } 

希望這個幫助別人。感謝您的幫助。

+1

對於什麼'SqlDataAdapter'?您已創建它,但未在代碼中使用。 –

+0

@AlexanderPetrov感謝您指出。因爲我們使用'ExecuteNonQuery()',所以不需要'SqlDataAdaptor' –

相關問題