Member 13033454 Ответов: 2

Присвоить значение строке в подразделе Б. чистые


Я не могу получить суб, над которым работаю, чтобы обновить строку со значением из базы данных. Я разработал СУБД, чтобы быть динамическим для типа объекта, и он работает со всеми другими объектами.

Это не возможно, чтобы обновить строки вроде этой?

Что я уже пробовал:

Я создал следующий СУБД, чтобы действовать в качестве наполнителя для различных объектов в моем приложении, основанном на базе данных sql.

Public Sub SQL_Object_Fill(sp As String, Params As Array, Values As Array, Objs As Array, Cols As Array, Optional type As String = Nothing)
        Dim cmd As New SqlCommand()
        Dim dr As SqlDataReader

        cmd.Connection = cn
        cmd.CommandText = sp
        cmd.CommandType = CommandType.StoredProcedure

        For Each Param As String In Params
            cmd.Parameters.Add(New SqlParameter(Param, Values(Array.IndexOf(Params, Param))))
        Next

        cn.Open()

        dr = cmd.ExecuteReader()

        If dr.HasRows Then

            While (dr.Read())

                For Each obj As Object In Objs
                    If obj.GetType() Is GetType(System.String) Then
                        obj = (dr(Cols(Array.IndexOf(Objs, obj)))).ToString()
                        MsgBox(obj)
                    ElseIf obj.GetType() Is GetType(System.Windows.Forms.ListBox) Then
                        obj.Items.Add(dr(Cols(Array.IndexOf(Objs, obj)).ToString()))
                    ElseIf obj.GetType() Is GetType(MetroFramework.Controls.MetroTextBox) Or obj.GetType() Is GetType(MetroFramework.Controls.MetroTile) Then
                        obj.Text = (dr(Cols(Array.IndexOf(Objs, obj)).ToString()))

                    End If
                Next

            End While

        End If

        cn.Close()

    End Sub


Это работало до сих пор, но сейчас я нахожусь на том этапе, когда мне нужно вызвать функцию, чтобы установить значение строки. Код ниже:

Dim Email As String = ""
        SQL_Object_Fill(sp:="[Misc].[Email_Fields]", Params:={"@id", "@Type"}, Values:={Main.id, Type}, Objs:={Email}, Cols:={"Email"})
        MsgBox(Email)

Я поставил msgbox как в функцию, так и после того, как я ее вызываю. Он выдает ожидаемое значение из окна сообщения внутри функции, но не в том, которое появляется после вызова функции?

Что я делаю не так? Все остальные типы объектов работают отлично.


По какой-то причине это не присваивает моему объекту значение столбца в хранимой процедуре. Я положил коробку msg в

ZurdoDev

Если вы отладите код, то найдете ответ довольно быстро, я думаю.

Member 13033454

Спасибо, я посмотрю. Я думаю, что проблема заключается в том, что моя субмарина не может обновить входной параметр. Я пробовал byref, но это все еще ни к чему не привело. Я надеялся, что это обычная проблема, что строки не могут быть обновлены изнутри субмарин или что-то в этом роде.

2 Ответов

Рейтинг:
0

j snooze

Есть только 2 известных мне способа установить значение, вызывающее процедуру.
1. установка его равным функции

Публичная функция SQL_Object_Fill (....) как объект {
значение}

Электронная Почта = SQL_Object_Fill(....){
значение}

Или
2. Используйте ByRef для параметра, чтобы установить указатель на вашу переменную.
Тусклая электронная почта в виде строки = ""

Общественные Суб SQL_Object_Fill(....,Как byref значение как объект)


Рейтинг:
0

Member 13033454

Спасибо вам за ваше решение. Сегодня я провел еще несколько исследований и сузил их до того, что объект представляет собой массив.

В основном в моем коде, если objs как массив, то он не работает, но если obj как строка, то он работает.

Тогда возникает вопрос: как вы делаете byref для каждого значения в массиве?