2016-10-28 4 views
-1

У меня есть этот общий метод, который я использовал в основном для вставки и получения данных из базы данных. Но теперь я столкнулся с проблемой, что, когда есть выходное значение, мне нужно создать новый метод, который принимает и выводит значения, возвращаемые выходной переменной в запрос моего db. Я слышал, что вы можете использовать его так.Как получить данные с параметром return с помощью C#?

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

Но как я могу изменить этот код в качестве общего метода.

Вот мой общий метод.

public DataTable GetDataWithParam(string spName, Dictionary<string, string> parms) 
     { 
      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); 
       } 

       using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
       { 
        OpenConnection(); 
        DataSet ds = new DataSet(); 
        da.Fill(ds); 
        CloseConnection(); 
        return ds.Tables[0]; 


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

Как изменить приведенный выше код для получения выходной переменной? помощь очень ценится. Также в db-запросе возвращаемое значение является int.

+0

с помощью параметра «ParameterDirection.Output» вы можете получить вставленный идентификатор строки (если вы указали идентификатор строки, скажем, как первичный ключ) –

ответ

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 Спасибо, что указал. Нет необходимости в 'SqlDataAdaptor', поскольку мы используем' ExecuteNonQuery() ' –

Смежные вопросы