【发布时间】:2018-09-13 00:06:03
【问题描述】:
我正在制定一个库存管理计划。数据库和表系统的设置方式是,每个类别都是不同的表。这是必要的,因为每个类别(即鞋子、电话、笔记本电脑)都有不同的字段来唯一标识每个产品。因此,我创建了一个表,然后通过 foreach 语句添加名为列的用户。我遇到的问题是它想在 ID 列已经存在时添加它。我尝试添加嵌套在 foreach 中的 If 语句,但它只是不断打破 foreach 循环。我只是还没有找到一种方法让它跳过 ID 列并继续添加要添加的每一列。
功能代码如下:
private void btnCreateCategory_Click(object sender, EventArgs e)
{
List<string> FieldNames = new List<string>();
foreach (var item in lstFieldNames.Items)
{
FieldNames.Add(lstFieldNames.Items.ToString());
}
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(FieldNames);
dgPreviewAdd.DataSource = NewCategory;
using (SqlConnection Connection = new SqlConnection(
Helper.cnnVal("InventoryManager")))
{
using (SqlCommand command = new SqlCommand("", Connection))
{
command.CommandText = "Create Table tbl" +
NewCategory.TableName.ToString() + "(ID int)";
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
foreach (DataColumn newColumn in NewCategory.Columns)
{
If( newColumn.ColumnName("ID")
{
}
Else
{
SqlParameter colparam = new SqlParameter();
colparam.ParameterName = "@ColumnName";
colparam.Value = newColumn.ColumnName.ToString();
SqlParameter tblParam = new SqlParameter();
tblParam.ParameterName = "@TableName";
tblParam.Value = "tbl" + NewCategory.TableName.ToString();
command.Parameters.Add(colparam);
command.Parameters.Add(tblParam);
command.CommandText = "dbo.AddCategoryColumns";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
LoadCategory catTableLoad = new LoadCategory();
DataTable catTable = new DataTable();
catTable = catTableLoad.getCategoryTable();
SqlParameter param = new SqlParameter();
param.ParameterName = "@CategoryName";
param.Value = NewCategory.TableName.ToString();
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@IdNumber";
param2.Value = catTable.Rows.Count + 1;
command.Parameters.Add(param);
command.Parameters.Add(param2);
command.CommandText = "dbo.AddCategory";
command.CommandType = CommandType.StoredProcedure;
Connection.Open();
command.ExecuteNonQuery();
Connection.Close();
}
}
}
【问题讨论】:
-
你能指出跳过ID列的代码吗?
-
抱歉,一定是副本丢失了。我在 if else 语句中添加了。
-
您可以在存储过程中检查该列是否确实已经存在,如果存在则跳过添加
-
对于完全不同的方法,请参阅en.wikipedia.org/wiki/…
标签: c# foreach multiple-columns create-table