문제

나는 이것을 알아 내려고 머리에서 머리를 꺼내고있다.

매개 변수를 사용할 때 vb.net에서 작동하기 위해 매개 변수화 된 쿼리를 만들 수 없습니다.

내가 찾은 것에서, 함수의 매개 변수를 사용하면 .NET에서 오류가 발생합니다 (샘플 코드 참조). 그러나 Visual Studio의 쿼리 창에서 작동하지 않는 쿼리를 실행하는 것이 제대로 작동합니다.

제기 된 오류는 다음과 같습니다.

25922- 기능에 대한 인수는 유효하지 않습니다.

정보 :http://msdn.microsoft.com/en-us/library/aa256772%28sql.80%29.aspx

샘플 코드 :

Imports System.Data.SqlServerCe

Public Class MiniDemo

    Public Shared Sub Main()
        Dim cs As String = "Data Source=Inventory.sdf; Persist Security Info=False;"
        Dim db As New SqlCeConnection(cs)
        db.Open()


        ''#Using parameters works
        Dim cmd As SqlCeCommand = db.CreateCommand()

        cmd.CommandText = "INSERT INTO inventory_type (inv_type_id, inv_type_name) VALUES (@id, @name)"
        cmd.Parameters.Add("@id", 1)
        cmd.Parameters.Add("@name", "test")
        cmd.ExecuteNonQuery()



        ''#Using parameters in functions does not work
        Dim cmd2 As SqlCeCommand = db.CreateCommand()

            ''#Broken on multiple lines for readability (built using string builders in real code)
        cmd2.CommandText = 
                     "SELECT 
                        inv_type_id, 
                        inv_type_name 
                      FROM
                        inventory_type 
                      WHERE 
                        ((@id IS NULL) OR (inv_type_id = @id)) AND 
                        ((@name IS NULL) OR (inv_type_name = @name))"

        cmd2.Parameters.Add("@id", 1)
        cmd2.Parameters.Add("@name", "test") ''# Would not work with DBNull.Value either

        Dim da2 As New SqlCeDataAdapter(cmd2)
        Dim dt2 As New DataTable()
        da2.Fill(dt2)
        db.Close()
    End Sub

End Class
도움이 되었습니까?

해결책

마지막 으로이 문제에 대한 해결책을 찾았습니다.

매개 변수의 dbtype 속성이 설정되지 않은 경우 함수에서 매개 변수를 사용합니다.

이것은 충돌합니다 :

    Dim cmd As SqlCeCommand = db.CreateCommand()

    cmd.CommandText = "SELECT COALESCE(@param1, @param2);"
    cmd.Parameters.Add("@param1", 1)
    cmd.Parameters.Add("@param2", "test")
    cmd.ExecuteScalar()

매개 변수의 dbtype 속성이면 함수에서 매개 변수 사용이 작동합니다. ~이다 세트

이것은 작동합니다 :

    Dim cmd As SqlCeCommand = db.CreateCommand()

    cmd.CommandText = "SELECT COALESCE(@param1, @param2);"
    cmd.Parameters.Add("@param1", 1).DbType = DbType.Int32
    cmd.Parameters.Add("@param2", "test").DbType = DbType.String
    cmd.ExecuteScalar()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top