我有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;
}
答案 0 :(得分: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)
}
此外,在捕获异常时不应忽略异常细节。 如果你不处理异常,最好不要抓住它。
答案 1 :(得分:0)
你为什么要回报?当C#遇到RETURN时,它退出该函数,停止迭代。
用另一种方式知道发生了什么。就个人而言,我使用修改后的行号,