-1

登録フォームがあり、ユーザーが以前に登録していないことを確認したい。

私のコードは以下にあります。(1) call メソッドと (2) パラメータをストアド プロシージャに渡すという 2 つの問題があると思います。私の症状は、これにより、入力パラメーターが初期化されていないという例外が発生することです。

create procedure fakeuser @username nvarchar(250),@codemeli nchar(10),@email     nvarchar(50), @user nvarchar(250) output,@code nchar(10)output,@mail nvarchar(50)output
 as
if exists(select username,email,codemeli from karbar where username=@username)
set @user=@username
else if exists(select username,email,codemeli from karbar where codemeli=@codemeli)
set @code=@codemeli
else if exists(select username,email,codemeli from karbar where email=@email)
set @mail= @email

C#コードは次のとおりです。

  public static string confirm(string username, string email, string codemeli)
    {
        string constring = "data source=.;database=site;integrated security=true;";
        SqlConnection connection = new SqlConnection(constring);

        // Command - specify as StoredProcedure
        SqlCommand command = new SqlCommand("fakeuser", connection);
        command.CommandType = CommandType.StoredProcedure;

        SqlParameter param = new SqlParameter("@username", SqlDbType.NVarChar);
        param.Direction = ParameterDirection.Input;
        param.Value = username;
        command.Parameters.Add(param);

        SqlParameter param2 = new SqlParameter("@email", SqlDbType.NVarChar);
        param2.Direction = ParameterDirection.Input;
        param2.Value = username;
        command.Parameters.Add(param2);

        SqlParameter param3 = new SqlParameter("@codemeli", SqlDbType.NChar);
        param3.Direction = ParameterDirection.Input;
        param3.Value = username;
        command.Parameters.Add(param3);

        // Return value as parameter
        SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar);
        returnuser.Direction = ParameterDirection.ReturnValue;
        command.Parameters.Add(returnuser);

        SqlParameter returncode = new SqlParameter("@code", SqlDbType.NChar);

        returncode.Direction = ParameterDirection.ReturnValue;

        command.Parameters.Add(returncode);
        SqlParameter returnmail = new SqlParameter("@mail", SqlDbType.NVarChar);
        returnmail.Direction = ParameterDirection.ReturnValue;
        command.Parameters.Add(returnmail);

        // Execute the stored procedure
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();

ありがとうございました。

4

1 に答える 1

1

@user、@code、@mail に設定ParameterDirection=Outputし、パラメータの width/size/length も指定します。

 SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar,100);
 returnuser.Direction = ParameterDirection.Output;
 command.Parameters.Add(returnuser);
于 2012-07-09T14:47:29.313 に答える