2013-12-18 6 views
1

Я пытаюсь получить данные, возвращенные из хранимой процедуры. Это то, что я пробовал, и абсолютно ничего не возвращается.Возвращаемое значение из хранимой процедуры

ХП:

Declare @Submit_ID as int 
Set @Submit_ID = (Select (Max(Sub_ID) + 1) from Sub_Details); 
INSERT INTO..... 
Return @Submit_ID 

C# (2,0)

SqlConnection conn = null; 
int subid; 
try 
{ 
    conn = new SqlConnection(conn_string); 
    SqlCommand cmd = new SqlCommand("INSERT_INTO_MYDB", conn); 
    cmd.CommandType = CommandType.StoredProcedure; 

    SqlParameter p1 = new SqlParameter("@FirstName", SqlDbType.NVarChar, 255); 
    p1.Direction = ParameterDirection.Input; 
    p1.Value = txtFirstName.Text; 
    cmd.Parameters.Add(p1); 

    SqlParameter p2 = new SqlParameter("@LastName", SqlDbType.NVarChar, 255); 
    p2.Direction = ParameterDirection.Input; 
    p2.Value = txtLastName.Text; 
    cmd.Parameters.Add(p2); 

    SqlParameter pSub = new SqlParameter("@Sub_ID", SqlDbType.Int); 
    pSub.Direction = ParameterDirection.ReturnValue; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 

    subid = Convert.ToInt32(pSub); 
} 
+1

И вопрос в том, что? – Tallmaris

ответ

1

Сначала нужно добавить параметр в cmd и использовать .Value до его значения

4

Вы не добавляете параметр возврата к команде:

SqlParameter pSub = new SqlParameter("@Sub_ID", SqlDbType.Int); 
pSub.Direction = ParameterDirection.ReturnValue; 

cmd.Parameters.Add(pSub); // <------------- add to command 

conn.Open(); 
cmd.ExecuteNonQuery(); 

subid = Convert.ToInt32(cmd.Parameters["pSub"].Value); 
+3

Кроме того, вы хотите использовать pSub.Value Я считаю, –

+0

@DarrenKopp хороший catch –

+0

Я считаю, что имя параметра также должно соответствовать '@Submit_ID! = @ Sub_ID' – Jason

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