Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DataTable查找或如果未找到,则插入行_C#_Insert_Datatable_Row_Datarow - Fatal编程技术网

C# DataTable查找或如果未找到,则插入行

C# DataTable查找或如果未找到,则插入行,c#,insert,datatable,row,datarow,C#,Insert,Datatable,Row,Datarow,我有一个包含两列的数据表dt。第一个col(称为CustomerId)是唯一的,不允许为null。第二个允许空值,并且不是唯一的 从一个方法中,我得到一个CustomerId,然后如果这个CustomerId不存在,我想插入一条新记录,如果这个CustomerId存在,我想将它对应的第二列中的值增加1 我不知道我该怎么做。我编写了一个select语句(返回System.Data.DataRow),但我不知道如何测试它是否返回空字符串 目前我有: //I want to insert a new

我有一个包含两列的数据表dt。第一个col(称为CustomerId)是唯一的,不允许为null。第二个允许空值,并且不是唯一的

从一个方法中,我得到一个CustomerId,然后如果这个CustomerId不存在,我想插入一条新记录,如果这个CustomerId存在,我想将它对应的第二列中的值增加1

我不知道我该怎么做。我编写了一个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; 
    }

Select
方法返回数据行对象数组。只需检查其长度是否为零(它从不为空)


顺便说一下,不要像本例中那样直接在代码中编写这样的语句。有一种技术可以破坏代码的安全性,叫做“SQL注入”,我鼓励您阅读。简言之,如果您将用户的
customerId
作为字符串,有经验的用户可能会编写由数据库执行的SQL脚本,并可能执行有害的操作。我在数据库编程方面没有经验,这只是“一般知识”…

如果数据表由数据库填充。我建议将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; 
}
var selectStatement=string.Format(“CustomerId={0}”,CustomerId);
变量行=dt.Select(selectStatement);
如果(行数<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;
    }
}