Не могли бы вы быть более конкретными относительно того, что вы пытаетесь достичь? Когда вы говорите, что не можете использовать переменные для построения строки подключения, вы имеете в виду, чтобы подключиться к внутреннему и получить данные?
Поскольку я не уверен, что это вы пытаетесь сделать, я сделаю некоторые догадки. Он СМОТРЕТЬ, как будто вы пытаетесь заполнить какой-либо список (скажем, dataGridView) в одной форме.
Затем вы разрешаете пользователю выбирать элемент в dataGridview, дважды щелкнув по любой ячейке в строке, которая обеспечивает получение идентификатора основного ключа для записи в таблице, содержащей ожидающие телефонные заметки.
Этот идентификатор затем используется для заполнения таблицы адаптера всеми записями из таблицы «Ожидание», в которой есть PendingID. Как основной ключ (тем самым возвращающий одну запись) или внешний ключ (таким образом, возвращающий 0 во многие записи) ,
Поскольку мы не знаем, где ваши результаты должны быть в конечном итоге (Имеется ли в Адаптере таблицы одна запись или потенциально много?), Сложно ответить на ваш вопрос.
Лично я хотел бы написать функцию, которая возвращает DataTable, содержащую информацию, которую вы хотите заполнить своей формой. В этом примере функция возвращает dataTable, содержащую запись для каждого состояния вместе со связанными данными. Пусть эта функция, а затем, являются членами класса Названный «MyDataFactory»:
'Shared Keyword makes this function Available without instantiating the containing class:
Public Shared Function StatesDataTable(ByVal StateID As Integer) As DataTable
'Set up your SQL Statement to execute against your back end:
Dim SQL As String = _
"SELECT StateID, State, StateName, HUDStateID " & _
"FROM tblState " & _
"ORDER BY State"
'Initialize a DataTable:
Dim dt As New DataTable
'The Using Keyword is elegant in that it handles bothersome Disposal tasks
'for unmanaged objects such as Database Connections:
Using cn As New OleDb.OleDbConnection(My.Settings.CreateTHisConnection)
Using cmd As New OleDb.OleDbCommand(SQL, cn)
'Open the Connection:
cn.Open()
'Retreive the Data into a DataReader:
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader
'Load the contents of the Reader into your datatable:
dt.Load(dr)
'Clean Up:
dr.Close()
cn.Close()
End Using ' cmd
End Using ' cn
'Return the DataTable to calling code:
Return dt
End Function ' StatesDataTable
Если бы я должен был использовать этот DataTable для заполнения списка на моей основной форме с StateID (спрятан в качестве элемента Value например ListBox) и StateName (отображается, как DisplayMember из списка ListBox). Когда пользователь нажал на определенное состояние в списке, можно было бы вернуть StateID из свойства Valuemember и передать его в качестве параметра другой функции, возможно, которая может вернуть dataTable округов, связанных с этим состоянием:
'Shared Keyword makes this function Available without instantiating the containing class:
Public Shared Function CountiesDataTable(ByVal CountyID As Integer) As DataTable
'Set up your SQL Statement to execute against your back end:
Dim SQL As String = _
"SELECT CountyID, StateID, CountyName " & _
"FROM tblCounties " & _
"WHERE CountyID = @CountyID " & _
"ORDER BY CountyName"
'Initialize a DataTable:
Dim dt As New DataTable
'The Using Keyword is elegant in that it handles bothersome Disposal tasks
'for unmanaged objects such as Database Connections:
Using cn As New OleDb.OleDbConnection(My.Settings.CreateTHisConnection)
Using cmd As New OleDb.OleDbCommand(SQL, cn)
'Add a parameter which limits the result set to counties in the specified state:
cmd.Parameters.AddWithValue("@CountyID", CountyID)
'Open the Connection:
cn.Open()
'Retreive the Data into a DataReader:
Dim dr As OleDb.OleDbDataReader = cmd.ExecuteReader
'Load the contents of the Reader into your datatable:
dt.Load(dr)
'Clean Up:
dr.Close()
cn.Close()
End Using ' cmd
End Using ' cn
'Return the DataTable to calling code:
Return dt
End Function ' CountiesDataTable
Затем можно использовать полученный результат этой функции для загрузки в всплывающую форму или какой-либо другой механизм для отображения округов, связанных с выбранным состоянием.
Не уверен, что это то, за чем вы после, но без немного больше, чтобы продолжить, я сделал все, что мог. , ,
Моя методология здесь немного неортодоксальная в земле ADO.NET, но мне она нравится, потому что она позволяет мне неявный контроль над WHAT, который я вытягиваю из Back-end.Не то, что для многих приложений, глобально доступная «Общая» функция, как это пригодится - Для того, чтобы извлечь в DataTable государства (или графства) «по требованию», я просто сделать следующее:
Dim dtStates As DataTable = MyDataFactory.StatesDataTable
Dim dtCounties As DataTable = MyDataFactory.Counties(ByVal StateID As Integer)
Во всяком случае , который помогает. Не стесняйтесь следить, если вы можете уточнить, что вы пытаетесь сделать, или найти это интересное, и хотите получить дополнительную информацию.