-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循环前面创建一个单,并在循环内添加参数。因此,在第二次迭代中,您将一组全新的参数添加到您的命令中。

只需将参数的创建移到循环之外,如下所示:

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 时,它会退出函数,停止迭代。

使用另一种方式来了解会发生什么。就个人而言,我使用修改后的行号,

于 2012-11-19T15:47:40.473 回答