5

こんにちは私はデータベースにデータを挿入しようとしました。クラスファイルを利用します。私には2つのクラスがあり、そのうちの1つはMaterial.csとDataAccessLayer.csです。しかし、私のコードを実行すると、プロシージャや関数sp_insert_componetに指定された引数が多すぎるなどのエラーが発生しました。 ""

//Material.csから

private string strCREATEDBY;
private string strCREATEDDATE;
private string strUPDATEDBY;
private string strUPDATEDDATE;
private string strSTATUS;

public string Createdby
{
    get
    {
        return strCREATEDBY;
    }
    set
    {
        strCREATEDBY = value;
    }
}
public string Createddate
{
    get
    {
        return strCREATEDDATE;
    }
    set
    {
        strCREATEDDATE = value;
    }
}
public string Updateddate
{
    get
    {
        return strUPDATEDDATE;
    }
    set
    {
        strUPDATEDDATE = value;
    }
}
public string Updatedby
{
    get
    {
        return strUPDATEDBY;
    }
    set
    {
        strUPDATEDBY = value;
    }
}
public string Status
{
    get
    {
        return strSTATUS;
    }
    set
    {
        strSTATUS = value;
    }
}

//Maingroup
//created by : ramya
//created date:15.2.2012
private string strIDENTIFY;
private string strNO;
private string strNAME;
private string strMAINIDENTIFICATION;


public string Identification
{
    get
    {
        return strIDENTIFY;
    }
    set
    {
        strIDENTIFY = value;
    }
}
public string NO
{
    get
    {
        return strNO;
    }
    set
    {
        strNO = value;
    }
}
public string NAME
{
    get
    {
        return strNAME;
    }
    set
    {
        strNAME = value;
    }
}
public string Mainidentify
{
    get
    {
        return strMAINIDENTIFICATION;
    }
    set
    {
        strMAINIDENTIFICATION = value;
    }
}
private string strItemtype;
public string Itemtype
{
    get
    {
        return strItemtype;
    }
    set
    {
        strItemtype = value;
    }
}
private string strSitename;
public string Sitename
{
    get
    {
        return strSitename;
    }
    set
    {
        strSitename = value;
    }
}

public int Savecomponent()
{
    objDL.Addparam("@Createdby", Createdby);
    objDL.Addparam("@Createddate", Createddate);
    objDL.Addparam("@Sitecode", NO);
    objDL.Addparam("@Itemtype", Itemtype);
    objDL.Addparam("@Status", Status);
    objDL.Addparam("@Maingroupsno", Mainidentify);
    objDL.Addparam("@Subgroupsno", Identification);
    objDL.Addparam("@Componetcode",NAME);
    objDL.Addparam("@Sitename", Sitename);
    int save = objDL.insert("sp_insert_componet");
    if (save > 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//DataAccessLayer.csから

public int insert(string strInsert)
{
    try
    {
        Con.Open();
        cmd.Connection = Con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = strInsert;
        int RetInsert = cmd.ExecuteNonQuery();
        return RetInsert;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    //got error in this finally block

    finally
    {
        Con.Close();
    }
}
4

5 に答える 5

6

ストアドプロシージャが予期していない引数を指定しています。ストアドプロシージャで定義されていない引数を削除します

ブロック内のすべてのパラメータを確認してください

objDL.Addparam("@Createdby", Createdby);
objDL.Addparam("@Createddate", Createddate);
objDL.Addparam("@Sitecode", NO);
objDL.Addparam("@Itemtype", Itemtype);
objDL.Addparam("@Status", Status);
objDL.Addparam("@Maingroupsno", Mainidentify);
objDL.Addparam("@Subgroupsno", Identification);
objDL.Addparam("@Componetcode",NAME);
objDL.Addparam("@Sitename", Sitename);

ストアドプロシージャに対応するパラメータがあります。手順で定義されていないパラメータを削除します

于 2012-06-05T04:48:20.237 に答える
5

パラメータの数が同じである場合は、それらのタイプを確認してみてください。

パラメータタイプは表と同じである必要があります

于 2012-12-19T23:33:09.787 に答える
2

異なるDB環境を使用している場合は、DB接続を確認してください。

この問題が発生したのは、構成ファイルが、同じSPと異なるパラメーターを持つ間違ったデータベースを指しているためです。

于 2018-10-11T11:21:46.387 に答える
1

問題は、ストアドプロシージャで定義されている入力パラメータが少ないことですsp_insert_componet

C#コードのパラメーターの数をストアドプロシージャのパラメーターの数と比較します。

于 2012-06-05T04:48:47.967 に答える
0

いいえ、SQLServerのストアドプロシージャにSQLINSERTが含まれている場合は、パラメータがまったく同じであっても、このエラーが発生します。

また、新しいレコードを挿入するテーブルのPRIMARYKEYのストアドプロシージャでパラメータを定義する必要があることがわかりました。私の場合、@ CompanyIDはパラメーターとして渡されませんが、定義しないと、「引数が多すぎます」というエラーが発生します。知るのに役立つ場合、CompanyIDフィールドの「identity」設定は「true」であり、新しいレコードごとに増分されます。

ALTER PROCEDURE [dbo]。[FormViewCompanies_Insert](

@CompanyIDASINT。/*パラメータとして渡されません*/

@MemberID AS INT、/*パラメータとして渡される/@ChapterID AS INT、/パラメータとして渡される* / .. ..

于 2020-06-06T11:28:39.327 に答える