2012-08-01 92 views
0
public int Test() 
     { 
      int result = 1; 

      SqlCommand cmd = new SqlCommand("spTest", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 

      var returnParameter = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int); 
      returnParameter.Direction = ParameterDirection.ReturnValue; 

      try 
      { 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
       result = Convert.ToInt32(returnParameter.Value); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message.ToString()); 
      } 
      finally 
      { 
       conn.Close(); 
      } 

      return result; 
     } 

该方法从result = 1开始,所以如果查询成功,我可以看到它变为0。我测试了这一点,它确实从1变为0.我的问题是,这是从存储过程获取默认RETURN_VALUE的正确方法吗?
从存储过程获取默认返回值?

这也将结果值从1改为0.为什么?查询尚未运行。

public int Test() 
     { 
      int result = 1; 

      SqlCommand cmd = new SqlCommand("spTest", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 

      var returnParameter = cmd.Parameters.Add("@RETURN_VALUE", SqlDbType.Int); 
      returnParameter.Direction = ParameterDirection.ReturnValue; 

      result = Convert.ToInt32(returnParameter.Value); 

      try 
      { 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message.ToString()); 
      } 
      finally 
      { 
       conn.Close(); 
      } 

      return result; 
     } 
+0

是的,它是启动存储过程的名称 - 或做它没有工作为你? – 2012-08-01 20:53:42

+0

我问的原因是因为我有结果= Convert.ToInt32(returnParameter.Value);在运行查询之前,它将结果变量从1更改为0.所以我不确定为什么会发生这种情况,考虑到查询的执行尚未发生。 – Testifier 2012-08-01 20:54:34

+0

增加了它,看看 – Testifier 2012-08-01 20:57:44

回答

1

是的。虽然如果您的连接无法打开,你会在你的finally

得到一个错误,如果这是SQL Server,请不要用SP