我有一个包含2列的DataTable 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;
}
答案 0 :(得分:1)
如果数据表正由数据库填充。我建议将customerid作为标识列。这样,当您添加新行时,它将自动创建一个新的customerid,它将是唯一的,并且比之前的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;
}
答案 1 :(得分:0)
这是我解决类似问题的方法。您可以根据自己的需要进行修改。
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;
}
}
答案 2 :(得分:-1)
Select
方法返回DataRow对象的数组。只需检查它的长度是否为零(它永远不会是null
)。
顺便说一下,不要像在这个例子中那样在代码中直接写这样的语句。有一种技术可以破坏代码的安全性,称为“SQL注入”,我鼓励您阅读Wikipedia Article。简而言之,有经验的用户可以编写由您的数据库执行的SQL脚本,如果您将customerId
作为字符串从用户那里获取,则可能会执行有害的操作。我没有数据库编程经验,这只是“一般知识”...