سؤال

أنا سحب الشعر من رأسي في محاولة لمعرفة هذا الخروج.

لا يمكنني تقديم استفسارات معلمة للعمل في 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