0

テーブルの 1 つの列、任意のレコードから 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

それで、私は最終的に従来のぎこちないコードに戻し、ほとんど次のように変更しました。

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 に答える