0

我需要从表的一列、任何记录中检索 val(所有记录中的 val 在任何给定时间都应该是相同的;也就是说,如果它是“3”,那么它在所有记录中都是“3”他们;如果是“17”,那么所有这些都是“17”(或“42”或其他)。

所以我看到了这样的遗留代码:

DataSet ds = dbconn.getDataSet("SELECT siteNo FROM workTables");

foreach (DataRow row in ds.Tables[0].Rows)
{
    siteNum = row["siteNo"].ToString();
}

...这很有效,但看起来很笨拙和浪费,因为可以循环通过大量记录,并且只使用最后一个循环的值。

所以我试图用这段代码“切入正题”:

String siteNum = ds.Tables[0].Rows.ToString();

...但有一个例外,因为 siteNum 是System.Data.DataRowCollection

然后我尝试了这个:

String siteNum = ds.Tables[0].Rows[0].ToString();

...但有一个例外,因为 siteNum 是System.Data.DataRow

所以我终于恢复到旧的 kludgy 代码,几乎是这样修改它:

DataSet ds = dbconn.getDataSet("SELECT siteNo FROM workTables");

foreach (DataRow row in ds.Tables[0].Rows)
{
    siteNum = row["siteNo"].ToString();
    // just need the first one
    break;
}

这行得通,但我确信这不是“首选方法”。谁知道“更好”的方法?

4

2 回答 2

1

用于ExecuteScalar返回结果集中第一行的第一列:

var result = connection.ExecuteScalar("SELECT siteNo FROM workTables");
if((result != null) && (result != DBNull.Value))
{
    site = Convert.ToInt32(result);
}
于 2014-08-20T23:11:21.197 回答
1

只需将您的查询更改为 SELECT TOP 1 siteNo FROM workTables 这样您就可以最大限度地减少服务器上的处理和网络流量。

于 2014-08-20T18:16:21.190 回答