找到数据表,如果没有找到,则插入行
本文关键字:插入 如果没有 数据表 | 更新日期: 2023-09-27 18:16:05
我有一个2列的数据表dt。第一个col(称为CustomerId)是唯一的,不允许为空。第二个允许为空且不唯一。
从一个方法,我得到一个CustomerId,然后我想插入一个新的记录,如果这个CustomerId不存在,或增加1在第二列对应的CustomerId,如果它存在。
我不确定我该如何处理这件事。我写了一个select语句(它返回System.Data.DataRow),但我不知道如何测试它是否返回一个空字符串。
目前我有:
//I want to insert a new row
if (dt.Select("CustomerId ='" + customerId + "'") == null) //Always true :|
{
DataRow dr = dt.NewRow();
dr["CustomerId"] = customerId;
}
如果数据库正在填充数据表。我建议将customerid作为标识列。这样,当您添加新行时,它将自动创建一个新的customerid,该id将是唯一的,并且比之前的id大1(取决于您如何设置您的标识列)
我会检查从select语句返回的行数。就像
我也会使用string.Format…
所以它看起来像这样
var selectStatement = string.Format("CustomerId = {0}", customerId);
var rows = dt.Select(selectStatement);
if (rows.Count < 1){
var dr = dt.NewRow();
dr["CustomerId"] = customerId;
}
这是我解决类似问题的方法。你可以根据你的需要修改它。
public static bool ImportRowIfNotExists(DataTable dataTable, DataRow dataRow, string keyColumnName)
{
string selectStatement = string.Format("{0} = '{1}'", keyColumnName, dataRow[keyColumnName]);
DataRow[] rows = dataTable.Select(selectStatement);
if (rows.Length == 0)
{
dataTable.ImportRow(dataRow);
return true;
}
else
{
return false;
}
}
Select
方法返回一个DataRow对象数组。只要检查它的长度是否为零(它永远不会是null
)。
customerId
。我在数据库编程方面没有经验,这只是"一般知识"…