public void AddTVPString(string name, IEnumerable <string> values)
    {
        var metadata = new[] {
            new SqlMetaData("one", SqlDbType.VarChar, 256)
        };
        var data = new TVPData
        {
            Data     = values,
            MetaData = metadata,
            Name     = name,
            Type     = "stringlist_tbltype",
            SetData  = (rec, s) => rec.SetString(0, (string)s),
        };

        _tvpParams.Add(name, data);
    }
    private void AddTVPParam(IDbCommand command, string name, TVPData value)
    {
        var dataList = new List <SqlDataRecord>();

        if (value.Data != null)
        {
            foreach (var d in value.Data)
            {
                var rec = new SqlDataRecord(value.MetaData);
                value.SetData(rec, d);       //note: this only works for a one-column TVP
                dataList.Add(rec);
            }
        }
        if (dataList.Count == 0)       //gotta make the value null if there isn't any data.
        {
            dataList = null;
        }
        var p = ((SqlCommand)command).Parameters.Add(name, SqlDbType.Structured);

        p.Direction = ParameterDirection.Input;
        p.TypeName  = value.Type;
        p.Value     = dataList;
    }