यह पोस्ट अब कई साल पुरानी है लेकिन मैंने एक ही समस्या को मारा और समाधान किया। यदि आप डेटाटेबल का उपयोग नहीं करते हैं बल्कि इसके बजाय SqlDataRecord के संग्रह को पॉप्युलेट करते हैं तो आप SqlDataRecord के डेटाटाइप को SqlDbType.Variant पर सेट कर सकते हैं।
List<SqlDataRecord> dataTable = new List<SqlDataRecord>();
var dr = new SqlDataRecord(
new SqlMetaData("Id", SqlDbType.Int),
new SqlMetaData("Value", SqlDbType.Variant));
dr.SetInt32(0, id);
dr.SetValue(1, myObject);
dataTable.Add(dr);
[...]
SqlCommand sqlCommand = new SqlCommand("dbo.MyProc");
var structuredParam = sqlCommand.Parameters.Add("myTableParam", SqlDbType.Structured);
structuredParam.Value = dataTable;