2013-12-18 171 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良好的捕获 –

+0

我相信该参数的名称也必须匹配'@Submit_ID!= @ Sub_ID' – Jason