Как я уже сказал в своем (теперь удаленном) комментарии, вам все равно нужно указать параметр @My_Data
, но в нем не должно быть никаких строк. Синтаксис, подобный приведенному ниже, вполне приемлем:
DECLARE @My_Data dbo.myTableValuedType;
EXEC [dbo].[sp_bring_some_data], @My_Data, 1;
У меня нет INSERT
строк в @My_Data
, но параметр все еще передается, он просто пуст. В вашем случае вы все равно объявляете параметр в VB.Net, но это все; вы бы не заполнили его набором данных.
В терминах параметров Table-Value пустая таблица фактически является эквивалентом непередачи параметра (если он имеет значение по умолчанию) для скалярного параметра.
Edit:
Мой VB.Net не очень хорош, но я думаю, вы бы создали пустой набор данных для передачи в параметр табличного значения как-то так:
Dim sqlConn As New SqlConnection(connString)
Dim sqlComm As New SqlCommand("dbo.sp_bring_some_data", sqlConn)
sqlComm.CommandType = CommandType.StoredProcedure
Dim dt As New DataTable
Dim dr As DataRow
dt.Columns.Add("IDColumn",Type.GetType("System.Int32"))
dt.Columns.Add("Column1",Type.GetType("System.String"))
sqlComm.Parameters.AddWithValue("@My_Data",dt)
sqlComm.Parameters.Add(New SqlParameter("@My_Context ", SqlDbType.Bit))
sqlComm.Parameters("@My_Context ").Value = chkMyCheckBox.Value 'Don't know if that works in VB.net in truth, I assume it does
Итак, я генерирую таблицу данных, но никогда не заполняю ее. Кто-то (намного) лучше в VB.Net будет знать, если это не так.
Я понимаю, что это должно быть в Using
или что-то в этом роде, но я не программист VB.Net, поэтому я работаю над основами из Google, документацией и некоторыми (старыми) знаниями из мои VB6 дней.