Вы также можете использовать XML для передачи списка параметров в хранимую процедуру:
1) В Visual Studio:
Создать новый адаптер таблицы и создатьВводим набор данных, чтобы получить одну запись:
SELECT * FROM myTable WHERE (ID = @ID)
2) В SQL Server Manager:
Создайте хранимую процедуру с теми же полями выбора, что и для вашего набранного набора данных:
CREATE PROCEDURE [dbo].[usrsp_GetIds]
@paramList xml = NULL
AS
SET NOCOUNT ON;
/*
Create a temp table to hold paramaters list.
Parse XML string and insert each value into table.
Param list contains: List of ID's
*/
DECLARE @tblParams AS TABLE (ID INT)
INSERT INTO @tblParams(ID)
SELECT
XmlValues.ID.value('.', 'INT')
FROM
@paramList.nodes('/params/value') AS XmlValues(ID)
/*
Select records that match ID's in param list:
*/
SELECT * FROM myTable
WHERE
ID IN (
SELECT ID FROM @tblParams
)
3) В Visual Studio:
Добавьте новый запрос к табличному адаптеру, выберите хранимую процедуру, созданную выше usrsp_GetIds , и назовите ее FillBy_Ids .Это создает команду:
TableAdapter.FillBy_Ids(@paramList)
4) В Visual Studio:
. В вашем коде .net создайте служебную функцию для преобразования массива строк в XML:
''' <summary>
''' Converts an array of strings to XML values.
''' </summary>
''' <remarks>Used to pass parameter values to the data store.</remarks>
Public Shared Function ConvertToXML(xmlRootName As String, values() As String) As String
'Note: XML values must be HTML encoded.
Dim sb As New StringBuilder
sb.AppendFormat("<{0}>", HttpUtility.HtmlEncode(xmlRootName))
For Each value As String In values
sb.AppendLine()
sb.Append(vbTab)
sb.AppendFormat("<value>{0}</value>", HttpUtility.HtmlEncode(value))
Next
sb.AppendLine()
sb.AppendFormat("</{0}>", xmlRootName)
Return sb.ToString
End Function
Пример использования:
Заполните таблицу данных, используя строго типизированные функции, передав список строк в качестве параметра:
'Create a list of record IDs to retrieve:
Dim ids as New List(of String)
ids.Add(1)
ids.Add(2)
ids.Add(3)
'Convert the list of IDs to an XML string:
Dim paramsXml As String = ConvertToXML("params", ids.ToArray)
'Get the records using standard DataTable & TableAdapter methods:
Using myDT As New MyDataTable
Using myTA As New MyTableAdapter
myTA.FillBy_Ids(myDT, paramsXml)
For Each row In myDT
'do stuff:
Next
End Using
End Using