【发布时间】:2012-07-07 15:58:38
【问题描述】:
我有以下内容,我可以让它按我的意愿工作,但我认为我做错了,你能解释一下如何以更有效的方式完成吗?同时也在 Categories 上循环,并在同一 Insert() 方法中执行与 Districts 相同的操作。
提前致谢。
#region Methods
public int Insert(List<District> Districts, List<Category> Categories)
{
StringBuilder sqlString = new StringBuilder("INSERT INTO Stores (name, image) VALUES (@Name, @Image);");
using (SqlConnection sqlConnection = new
SqlConnection(ConfigurationManager.ConnectionStrings["OahuDB"].ConnectionString))
{
SqlCommand sqlCommand = new SqlCommand(sqlString.ToString(), sqlConnection);
sqlCommand.Parameters.AddWithValue("@Name", this.Name);
sqlCommand.Parameters.AddWithValue("@Image", this.Image);
sqlConnection.Open();
int x = (int)sqlCommand.ExecuteScalar();
sqlString.Clear();
sqlCommand.Parameters.Clear();
foreach (District item in Districts)
{
sqlString.AppendLine("INSERT INTO districts_has_stores (district_id, store_id) VALUES (@DistrictID, @StoreID);");
sqlCommand.CommandText = sqlString.ToString();
sqlCommand.Parameters.AddWithValue("@DistrictID", item.ID);
sqlCommand.ExecuteNonQuery();
}
return x;
}
}
编辑
通过以下方式实现上述目标是错误的吗?
sqlString.Clear();
sqlCommand.Parameters.Clear();
sqlString.AppendLine("INSERT INTO districts_has_stores (district_id, store_id) VALUES (@DistrictID, @StoreID);");
sqlCommand.CommandText = sqlString.ToString();
sqlCommand.Parameters.AddWithValue("@StoreID", x);
foreach (District item in Districts)
{
sqlCommand.Parameters.AddWithValue("@DistrictID", item.ID);
sqlCommand.ExecuteNonQuery();
}
sqlString.Clear();
sqlCommand.Parameters.Clear();
sqlString.AppendLine("INSERT INTO categories_has_stores (category_id, store_id) VALUES (@CategoryID, @StoreID);");
sqlCommand.CommandText = sqlString.ToString();
sqlCommand.Parameters.AddWithValue("@StoreID", x);
foreach (Category item in Categories)
{
sqlCommand.Parameters.AddWithValue("@CategoryID", item.ID);
sqlCommand.ExecuteNonQuery();
}
【问题讨论】:
-
请注意,我知道上面的方法中缺少一些东西,例如 StoreID 以及循环不断附加 INSERT 语句的事实。
-
你可以例如创建一个包含所有
DistrictID列表的XML,然后只调用一次INSERT(并使用XQuery 语句从XML 结构中提取单个ID值)
标签: c# asp.net sql sql-server iterator