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;
        }
4

1 に答える 1

1

はい。接続を開くことができない場合でも、エラーが発生しますfinally

また、これがSQL Serverの場合は、ストアドプロシージャ名をspで開始しないでください。

于 2012-08-01T20:53:40.997 に答える