2

私は以下のようにプロシージャを保存しました:

ALTER PROCEDURE [dbo].[Insert_tblCustomer] 
-- Add the parameters for the stored procedure here
@Username varchar(20) = null, 
@Password varchar(20)= null,
@UserType varchar(20)='User',
@FirstName varchar(50)=null,
@LastName varchar(50)=null,
@DateOfBirth varchar(50)=null,
@Gender varchar(10)=null,
@Unit_No int = null,
@St_No int=null,
@St_Name varchar(20)=null,
@Suburb varchar(20)=null,
@State varchar(20)=null,
@Postcode int=null,
@Email varchar(50)='',
@Phone varchar(15)=null

AS... および 5 つのフィールドがあります。つまり、ユーザー名、パスワード、名、姓、および電子メールは必須フィールドです。今C#から、私はこれを試しています:

dbConnection target = new dbConnection(); // TODO: Initialize to an appropriate value
string _query = string.Empty; // TODO: Initialize to an appropriate value

SqlParameter[] param = new SqlParameter[5]; // TODO: Initialize to an appropriate value
param[0] = new SqlParameter("@Username", "hakoo");
param[1] = new SqlParameter("@Password", "hakoo");
param[2] = new SqlParameter("@FirstName", "Hakoo");
param[3] = new SqlParameter("@LastName", "Hakoo");
param[4] = new SqlParameter("@Email", "haks@abc.com");
bool expected = true; // TODO: Initialize to an appropriate value
bool actual;
actual = target.Execute_InsertQuery("dbo.Insert_tblCustomer", param);

しかし、Assertfail 例外が発生しています。テストでストアドプロシージャを使用する初心者です。誰かが私が間違っているところを修正できますか?

「Assert部分を追加」

bool expected = true; // TODO: Initialize to an appropriate value
bool actual;
actual = target.Execute_InsertQuery("dbo.Insert_tblCustomer", param);

dbConnection は、作成したコア クラスであり、ここに汎用クエリを配置しています。

public bool Execute_InsertQuery(string _query, SqlParameter[] param) 
{

    try
    {
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = OpenConnection();
        cmd.CommandText = _query;

        cmd.Parameters.AddRange(param);
        cmd.ExecuteNonQuery();
        return true;
    }
    catch (Exception ex)
    {
        Console.Write(ex.StackTrace.ToString());
        return false;
    }
}

エラーを取得するための更新: すべてのパラメーターをこの方法で渡そうとしました:

dbConnection c = new dbConnection();
System.Data.SqlClient.SqlParameter[] param = new System.Data.SqlClient.SqlParameter[15];
param[0] = new SqlParameter("@Username", "hakoo");

param[1] = new SqlParameter("@Password", "hakoo");
param[2] = new SqlParameter("@UserType", "User");
param[3] = new SqlParameter("@FirstName", "Hakoo");
param[4] = new SqlParameter("@LastName", "Hakoo");
param[5] = new SqlParameter("@DateOfBirth", "02/11/88");
param[6] = new SqlParameter("@Gender", "");
param[7] = new SqlParameter("@Unit_No", null);
param[8] = new SqlParameter("@St_No", 25);
param[9] = new SqlParameter("@St_Name", "anc st");
param[10] = new SqlParameter("@Suburb", "ancst");
param[11] = new SqlParameter("@State", "assadd@few");
param[12] = new SqlParameter("@Postcode", 2615);
param[13] = new SqlParameter("@Email", "abc@def.com.au");
param[14] = new SqlParameter("@Phone", "165103548");
c.Execute_InsertQuery("dbo.Insert_tblCustomer", param);

しかし、このために、私はこのエラーが発生しています:

パラメータ化されたクエリ '(@Username nvarchar(5),@Password nvarchar(5),@UserType nvarchar(') には、指定されていないパラメータ '@Unit_No' が必要です。SQL Server でこの Store プロシージャを実行できます。

4

2 に答える 2

1

役立つかもしれないことの 1 つは、コマンドの種類を指定することです。

   SqlCommand cmd = new SqlCommand();
   cmd.Connection = OpenConnection();
   cmd.CommandText = _query;
   cmd.CommandType = CommandType.StoredProcedure;
于 2013-05-16T18:39:58.347 に答える