2009-03-16 10 views
2

次のコードスニペットでは、より少ないコードを使用した方がよいソリューションがありますか? VB6で自分自身が大量にやっていることが分かり、それを切り詰めることを望んでいました。レコードセットを使用してDBから値を引き出すためのより洗練されたソリューション

私はそれを理解したようConnection.Executeは、これは単なる整然と方法があるかどうかを調べて、機能の問題ではありません

SQL = "SELECT SomeID FROM TableA" 
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText 
    SomeID = RecordSet.Fields(0).Value 
    RecordSet.Close 

    SQL = "SELECT AnotherID FROM TableB" 
    RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText 
    AnotherID = RecordSet.Fields(0).Value 
    RecordSet.Close 

動作しません。

+0

をカプセル化すると思いますけれども、私はスカラーのクエリを実行したいです。 VBに何か類似点があるかどうかはわかりません。 – Will

答えて

1

RecordSet.Open()Connection.Execute()の両方のためのデフォルトパラメータは、次のとおりです。

  • adOpenForwardOnly
  • adLockReadOnly

あなたが異なる設定を使用しますが、あなたの中にデフォルト値を使用して行くことではない明らかな理由はありません場合。

あなたはConnection.Execute()あなたは、静的SQL持っているように見える、特に以来、動作しないことを考えて、なぜ私にはわからない:

Function FetchOneField(Connection, SQL) 
    With Connection.Execute(SQL) 
    FetchOneField = .Fields(0).Value 
    .Close 
    End With 
End Function 

SomeID = FetchOneField(Connection, "SELECT SomeID FROM TableA") 
AnotherID = FetchOneField(Connection, "SELECT AnotherID FROM TableB") 

' or, not expressed as a function (not less lines, but "tidier" nevertheless)' 
With Connection.Execute("SELECT SomeID FROM TableA") 
    SomeID = .Fields(0).Value 
    .Close 
End With 
0

クエリごとに1つのレコードを持っていると仮定すると、あなたはこのようにそれを行うことができますが

SQL = "SELECT TableA.SomeID, TableB.AnotherID FROM TableA, TableB" 
RecordSet.Open SQL, Connection, adOpenStatic, adLockOptimistic, adCmdText 
SomeID = RecordSet.Fields(0).Value 
AnotherID = RecordSet.Fields(1).Value 
RecordSet.Close 
0

が必要です。これは私の作品:

Const Sql1 As String = "SELECT SomeID FROM TableA" 
    SomeID = Connection.Execute(Sql1)(0).Value 

    Const Sql2 As String = "SELECT AnotherID FROM TableB" 
    AnotherID = Connection.Execute(Sql2)(0).Value 

...個人的に私はC#では私は、接続プールからの接続を解放について明示的な可能性があり、それらのConnection.Executeラインなど

関連する問題