【发布时间】:2012-11-19 15:43:35
【问题描述】:
我有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;
}
【问题讨论】:
-
好吧,你几乎肯定会遇到一个例外。删除
try...catch块,让我们知道异常是什么。 50 英镑表示您在第一次写入数据库后关闭连接 :) -
这种编码风格——带有成功/失败返回码的try/catch——已经过时而且很糟糕。您无法获得有关问题所在的任何信息,因此您无法充分解决问题。
-
或者他对
ExecuteNonQuery()的调用返回-1。 OP 可以在其中设置一个断点并找出发生了什么吗?
标签: c# asp.net sql-server tsql foreach