检查表是否包含行C#

时间:2014-08-27 17:08:15

标签: c# sql

我试图弄清楚我的数据表是否包含某一行。所以我使用了.Contains方法,但是当我尝试运行我的程序时遇到了一个MissingPrimaryKeyException,我无法弄明白。

DataTable table = dataQuery.executeQuery();

foreach(DataRow row in table.Rows)
{
    if(table.Rows.Contains("certainRow"))
    {
        blah blah blah
    ...

我只是在第二次调用table时出现异常。这对我来说是没有意义的。如果我的桌子上没有主键,那么它在foreach通话中是否会给我一个错误?

编辑:我刚才意识到Contains做了别的事情,而不是我想的。 Matthijs ......是的,这就是我想要的。我需要知道" certainRow"实际上是一行存在,否则我无法操纵该行中的数据。

不幸的是,我是C#的新手并且在5年以上的任何事情中都没有编程,所以我无法弄清楚是否有一种方法能够满足我的需求。或者如果我需要自己创造一些东西。

编辑#2: 我使用DataTableReader找到了解决问题的方法。

private bool doesExist(string rowName, DataTable table)
    {
        bool value = false;
        DataTableReader reader = new DataTableReader(table);

        while (reader.Read())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                if (reader.GetValue(i) == rowName)
                {
                    value = true;
                }
            }
        }
        return value;
    }

2 个答案:

答案 0 :(得分:0)

您应该可以使用DataTableReader,可以找到更多信息here

一个例子是:

private static DataTable GetCustomer()
{
     DataTable table = new DataTable();
     DataColumn id = table.Columns.Add(@"Id", typeof(int));

     table.Columns.Add(@"Name", typeof(string));
     table.PrimaryKey = new DataColumn[] { id };
     table.Rows.Add(new object[] { 1, @"John" });
     return table;
}

上面的代码将构建一个表,因为您看到定义了Primary Key并添加了内容。这就是你构建表的方式。现在阅读,你会:

using(DataTableReader reader = new DataTableReader(new DataTable[] { customer }))
{
     do
     {
         if(reader.HasRows)
         {
              // Do Something
         }
     } while (reader.NextResult());
}

如您所见,它验证行存在,然后执行任务。非常简单的例子,希望它有所帮助。

.Contains将返回boolean的真值或假值。

关于您的评论,您可以致电reader[@"ColumnName"],它应该尝试在没有问题的情况下阅读。所以如果:

if(reader[@"ColumnName"] != DBNull.Value)
{
     // Do Something.
}

答案 1 :(得分:0)

你可以写:

bool contains = table.Rows.Cast<DataRow>().SelectMany(r => r.ItemArray).Contains(value);