2012-05-23 3 views
0

나는 다양한 매개 변수로 그것을 시작하는 많은 "New()"함수를 가진 클래스를 가지고있다. 인수없이 클래스를 초기화 할 New() 함수를 만들고 싶습니다. 문제는 클래스의 데이터를 채우고 저장 프로 시저를 가져와 작업을 수행하지만 저장 프로 시저 매개 변수가있는 "fillData"함수가 있다는 것입니다. 새로운 fillData 함수를 생성하고 싶지는 않지만 내장 프로 시저를 추가적으로 필요로하지 않고 fillData 함수를 사용하고자합니다. 이것에 대한 내 방식은 빈 SqlParameter var를 fillData 함수에 전달하는 것이었지만, 빈 매개 변수를 검사 할 때 필자가하는 일은 없었습니다. 항상 거기에 물건이 있다고 생각하는 것 같습니다. 이 "PARAMS"매개 변수가 비어있는 경우sqlParameter가 비어 있는지 확인하는 방법?

내가 확인하고 싶은 :

Public Sub New() 
    'just created this so i could pass something 
    'and continue using fillData as is. 
    Dim p(1) As SqlParameter 

    Dim db As sqldb.command 
    db = New sqldb.command(ConfigurationManager.ConnectionStrings("sqlConnectionString").ConnectionString) 
    fillData("r2m_getAllListingsSorted", p) 
End Sub 

...

그래서 내가 fillData 기능을 계속 사용할 수 있습니다 내가 이것을 수정하는 것이 어떻게
Private Sub fillData(ByVal sp As String, ByVal params As SqlParameter()) 
    Dim db As sqldb.command 
    Dim r As SqlDataReader 
    db = New sqldb.command(ConfigurationManager.ConnectionStrings("sqlConnectionString").ConnectionString) 

    'right here, im having the trouble, seems no matter how I try to "params", 
    'the code always defaults to db.executeReader(sp, p) 
    'I've tried params.Length = 0 and params.ToString = "" also. 
    If params.Value Then 
     r = db.executeReader(sp) 
    Else 
     r = db.executeReader(sp, params) 
    End If 

, SqlParameter 매개 변수를 전달하지 않고?

감사합니다.

당신은 선택하여 SqlParameter에를하고 그것을 Nothing의 기본값을 제공 할 수 있습니다

답변

0

:

Private Sub fillData(ByVal sp As String, 
          ByVal Optional params As SqlParameter() = Nothing) 

는 그 다음 PARAMS 인수없이 메소드를 호출

fillData("StoredProcName")

그런 다음 매개 변수를 확인 할 수 있습니다 사용하기 전에 Nothing인지 확인하려면 fillData 메서드 내부에 있습니다.

If params is Nothing Then 
    // Do something if there's no params 
Else 
// Do something if there is params 
End If 
+0

완벽! 나는 "Optional"키워드를 인식하지 못했고 항상 "Nothing", 0, NULL, DBNULL을 혼동했다. 이것은 훌륭하게 작동하고 깨끗합니다. 고맙습니다! – russds

관련 문제