-1

重複の可能性:
List<contacts> をテーブルに挿入

List<Contacts>そのリストをループして、ストアド プロシージャを使用してデータベースに追加したいと考えています。しかし、私のforeachループはリストの最初の連絡先のみを挿入します。すべての連絡先を挿入するストアド プロシージャを呼び出すにはどうすればよいですか?

private static bool Insert_company_contacts(int companyID, List<Contacts> contacts)
{
    // get a configured DbCommand object
    DbCommand comm = GenericDataAccess.CreateCommand();

    // Set the stored procedure name 
    comm.CommandText = "AddContacts";

    // Company Info
    foreach (var c in contacts)
    {
        // create new parameter @LabelContactTypeID
        DbParameter param = comm.CreateParameter();
        param.ParameterName = "@CompanyID";
        param.Value = companyID;
        param.DbType = DbType.Int32;
        comm.Parameters.Add(param);

        // create new parameter @LabelContactTypeID
        param = comm.CreateParameter();
        param.ParameterName = "@LabelContactTypeID";
        param.Value = c.LabelContactTypeID;
        param.DbType = DbType.Int32;
        comm.Parameters.Add(param);

        // create new parameter @ContactDetails
        param = comm.CreateParameter();
        param.ParameterName = "@ContactDetails";
        param.Value = c.ContactDetail;
        param.DbType = DbType.StringFixedLength;
        comm.Parameters.Add(param);

        // create new parameter @Status
        param = comm.CreateParameter();
        param.ParameterName = "@Status";
        param.Value = c.Status;
        param.DbType = DbType.Boolean;
        comm.Parameters.Add(param);

        // create new parameter @Notes
        param = comm.CreateParameter();
        param.ParameterName = "@Notes";
        param.Value = c.Notes;
        param.DbType = DbType.StringFixedLength;
        comm.Parameters.Add(param);

        try
        {
            if (GenericDataAccess.ExecuteNonQuery(comm) == -1)  
                return false;
        }
        catch
        {
            return false;
        }
    }

    return true;
}
4

2 に答える 2

1

ループの前にシングルを作成しDbCommand、ループ内にパラメーターを追加します。したがって、2 回目の反復では、まったく新しい一連のパラメーターをコマンドに追加します。

次のように、パラメーターの作成をループの外に移動するだけです。

DbCommand comm = GenericDataAccess.CreateCommand();
//Set the store Proc name 
comm.CommandText = "AddContacts";

DbParameter paramDetails = comm.CreateParameter();
comm.Parameters.Add(paramDetails);
// add other parameters ...

foreach (var c in contacts)
{
    // in the loop, just update parameter values and execute the command
    paramDetails.Value = c.ContactDetail;
    GenericDataAccess.ExecuteNonQuery(comm)
}

さらに、例外をキャッチするときに、例外の詳細を無視するべきではありません。例外を処理しない場合は、まったくキャッチしない方がよいでしょう。

于 2012-11-19T15:47:55.987 に答える
0

なぜリターンを入れるのですか?C# が RETURN に遭遇すると、関数を終了し、反復を停止します。

何が起こるかを知るために別の方法を使用してください。個人的には、変更された Rows 番号を使用します。

于 2012-11-19T15:47:40.473 に答える