0
MemberChecker.CommandType = CommandType.StoredProcedure;

追加され 、問題が解決しました!

---- ここで面白い質問がありました!

ストアド プロシージャにアクセスする SqlCommand が使用する場合にのみ機能するのはなぜですか

ParameterDirection.InputOutput

そしてそうではない

ParameterDirection.Output

ParameterName '@Customer' の SqlParameter は、この SqlParameterCollection に含まれていません

これが私のコードの一部です:

        using (SqlConnection H20_Connection = new SqlConnection(ConfigurationManager.ConnectionStrings["H20"].ConnectionString))
        {
            SqlCommand MemberChecker = new SqlCommand("execute custom_x_Check", H20_Connection);
            MemberChecker.Parameters.Add("@TN", SqlDbType.VarChar,50).Value = TNH20.Text.Trim();
            MemberChecker.Parameters.Add("@Customer_ID", SqlDbType.VarChar, 50).Value = TNH20.Text.Trim();

            MemberChecker.Parameters.Add("@Customer", SqlDbType.VarChar, 100).Direction = ParameterDirection.Output;
            MemberChecker.Parameters.Add("@Out_TN", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
            MemberChecker.Parameters.Add("@Out_Customer_ID", SqlDbType.VarChar, 50).Direction = ParameterDirection.Output;
            H20_Connection.Open();
            if (MemberChecker.ExecuteNonQuery() > 1)
            {
                Top.Visible = false;
                Bottom.Visible = true;
            }
            else
            {
                Top.Visible = true;
                Bottom.Visible = false;
            }
        }

そして私のSQL

alter proc custom_Check

@TN varchar(50) ='',
@Customer_ID varchar(50)='',
@Customer varchar(100) out,
@Out_TN varchar(50) out,
@Out_Customer_ID varchar(50) out

as

select @Out_Customer_ID=Customer_ID,
@Out_TN = MainTN,@Customer = Customer
 from [vCustomerName]
where Customer_ID  = @Customer_ID or @TN = MainTN

ありがとう!

4

2 に答える 2

1

@Customer@Out_TN、およびSQL のパラメーターであるため、@Out_Customer_IDすべて使用する必要があります。ParameterDirection.Outputout

このようなもの:

MemberChecker.Parameters.Add("@Customer").Direction = ParameterDirection.Output;
MemberChecker.Parameters.Add("@Out_TN").Direction = ParameterDirection.Output;
MemberChecker.Parameters.Add("@Out_Customer_ID").Direction = ParameterDirection.Output;

複数のレコードが基準を満たす場合、SQL は失敗することにも注意してください。

where Customer_ID  = @Customer_ID or @TN = MainTN

お気付きのように、ストアド プロシージャを呼び出しているexecuteステートメントは、この場合は正しくありません。コマンドを次のように変更します。

SqlCommand MemberChecker = new SqlCommand("custom_Check", H20_Connection);
MemberChecker.CommandType = CommandType.StoredProcedure;
于 2013-02-04T20:30:41.020 に答える
0
MemberChecker.CommandType = CommandType.StoredProcedure
于 2013-04-15T18:36:24.657 に答える