2009-03-16 1 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 

작동하지 않습니다. 모두 RecordSet.Open()Connection.Execute()에 대한

+0

연결 풀에서 연결을 해제에 대해 명시 될 수있다 그 Connection.Execute 라인을 캡슐화 거라고하지만 . 나는 VB가 비슷한 것을 가지고 있는지 잘 모르겠다. – Will

답변

1

기본 매개 변수는 다음과 같습니다

  • 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

당신은 쿼리 당 한 기록을 가지고 있다고 가정하면 당신이 이런 식으로 할 수를

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#에서 등

관련 문제