2

私は、Excel シートのいくつかのエントリを Oracle データベースのテーブルと比較して、Oracle データベースのいくつかのエントリを検証する小さなアプリケーションに取り組んでいるので、データベースのクエリのみに取り組んでおり、複雑すぎることはありません。

クエリが何であるかに関係なくコードを変更する必要がないように、これを完全に動的にしようとしていますが、クエリしているテーブルに数値型と文字列型がある場合、小さな問題が発生しています値。

If chkConnState() Then
sSql = "SELECT * FROM " & workSheetName & " WHERE "
For i = 1 To ds.Tables.Item(0).Columns.Count - 1
sSql &= ds.Tables.Item(0).Columns.Item(i).ToString & " = " & ds.Tables.Item(0).Rows.Item(i).Item(i).ToString & " AND "
Next
newSql = sSql.Substring(0, sSql.Length - 4)
End If

ここでは、テーブルに対してクエリを実行する SQL ステートメントのみを収集しています。Excel から列と行の情報を取得し (私が知っている情報は正しく、テーブルの内容を確認するために使用しています)、クエリから末尾の「AND」を削除します。

列が数値か文字列かを判断する簡単な方法はありますか? 私が今抱えている問題は、文字列値の "'" & value & "'" を動的に追加する場所を決定する方法がわからないことです。PK でクエリを実行するだけですが、テーブルごとに異なるため、これを見つける簡単な方法があるかどうかはわかりません。上記の方法で複数のレコードを取得するのではなく、1 つのレコードのみを取得します。これを動的にするためのより良い方法はありますか?

4

2 に答える 2

2

LarsTech が言ったように、TryParse を使用して値が数値かどうかを判断できます。

If(Double.TryParse(ds.Tables.Item(0).Rows.Item(i).Item(i).ToString, Nothing), _
ds.Tables.Item(0).Rows.Item(i).Item(i).ToString, _ 
"'" & ds.Tables.Item(0).Rows.Item(i).Item(i).ToString & "'")

これにより、数値以外の値は一重引用符で囲まれます。

于 2013-10-03T21:19:14.977 に答える
0

次の Func を使用して、フィールドを簡単にチェックできます

public static Func<string, bool> isNumeric = x => { int i = 0; return Int32.TryParse(x, out i); };

簡単な使い方

if (isNumeric(yourField)) {

} そうしないと {

}

于 2013-10-03T21:58:05.467 に答える