我有一个我正在处理的库存管理程序。数据库和表系统的设置方式是每个类别都是不同的表。这是必要的,因为每个类别(即鞋子,电话,笔记本电脑)具有不同的字段以唯一地标识每个产品。因此,我创建了一个表,然后通过foreach语句添加名为columns的用户。我遇到的问题是它想要在已存在时添加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();
}
}
}
使用以下任何一种:
foreach (DataColumn newColumn in NewCategory.Columns)
{
if (newColumn.ColumnName == "ID") continue;
//Rest of logic goes here
}
或完全从循环中排除:
foreach (DataColumn newColumn in NewCategory.Columns.Where( c => c.ColumnName != "ID" ))
{
//Rest of logic goes here
}
您可以使用distinct来对类别进行分组
不要忘记使用System.Linq添加;
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());
}
var grpfieldNames = FieldNames.Distinct();
DataTable NewCategory = new DataTable();
NewCategory = CreateTable(grpfieldNames);
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();
}
}
}