0

私はこのコードを持っています:

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=c:\\myDB.accdb");
conn.Open();

sql = string.Format("SELECT Version FROM tblVersions where [FUL Flag] = 'Y'");
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
DataSet ds = new DataSet();

da.Fill(ds);
dt = ds.Tables[0];

if (ds.Tables[0].Rows.Count == 1)
{
    tV.Text = dt.Rows[0][0].ToString();    //only looking for the first result
}
else
{
    tV.Text = "no match";
}

実行しても結果が返されません。ただし、SELECTステートメントをコピーしてAccessのクエリウィンドウに直接貼り付けると、結果が見つかります。これが私がAccessに貼り付けるものです:

SELECT Version FROM tblVersions where [FUL Flag] = 'Y'

これにより、多くの行が返されます。

どこかで違いがありませんか?ありがとう!

編集:解決策を見つけました..私は探しているべきです

(ds.Tables[0].Rows.Count > 0)

それ以外の

(ds.Tables[0].Rows.Count == 1)

複数の行が返される可能性があるため。

4

2 に答える 2

3

私はここであなたの行動の声明を仮定しています:

実行しても結果が返されません。

TextBoxテキストは「一致なし」に置き換えられます」を意味します。そうですか?

これにより、多くの行が返されます。

それはそれを説明しています。あなたの状態を見てください:

if (ds.Tables[0].Rows.Count == 1)

一致するものが1つだけでない限り、すべての場合に一致するものはないと主張しています。

あなたはおそらく欲しい:

if (ds.Tables[0].Rows.Count > 0)
于 2013-03-11T18:13:32.987 に答える
1

これを行う必要があります:

ds.Tables[0].Rows.Count > 0 instead of ==1

完全な例:

if (ds.Tables[0].Rows.Count > 0)
{
    tV.Text = dt.Rows[0][0].ToString();    //only looking for the first result
}
else
{
    tV.Text = "no match";
}
于 2013-03-11T18:19:24.370 に答える