如何使用自定义DbDataReader填充表值参数?

时间:2017-03-20 16:30:09

标签: c# sql-server sqlclient table-valued-parameters dbdatareader

根据MSDN>>>>>>>>>> [0, 1, 2] 0.33016179294984127 [2, 0, 1] 0.7797639530009745 [1, 2, 0] 0.6292245916315391 >>>>>>>>>> 支持从System.Data.SqlClientDataTableDbDataReader个对象填充表值参数。

我编写了以下代码,使用IEnumerable<SqlDataRecord>对象填充表值paremeter:

IEnumerable<SqlDataRecord>

完美无缺。

MSDN页面上写着:

  

您还可以使用从static void Main() { List<int> idsToSend = ... using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); SqlCommand command = new SqlCommand(@"SELECT ... FROM ... INNER JOIN @ids mytable ON ...", connection); command.Parameters.Add(new SqlParameter("@ids", SqlDbType.Structured) { TypeName = "int_list_type", Direction = ParameterDirection.Input, Value = GetSqlDataRecords(idsToSend) //returns IEnumerable<SqlDataRecord> }); SqlDataReader reader = command.ExecuteReader(); //consume reader... } } 派生的任何对象来流式传输行   数据到表值参数。

我想使用自定义DbDataReader来传递行数据。像这样:

DbDataReader

我在初始代码示例中更改了以下行:

public class CustomDataReader : DbDataReader
{
    public CustomDataReader(IEnumerable<int> values)
    {           
    }

    //implementation of other abstract methods and fields required by DbDataReader
    //...
}

如果我运行代码,它会在执行Value = GetSqlDataRecords(idsToSend) => Value = new CustomDataReader(idsToSend) 期间给出以下异常:

  

未处理的类型&#39; System.NotSupportedException&#39;发生了   在System.Data.dll中附加信息:指定的方法不是   支撑。

我在我的command.ExecuteReader()类的所有方法和属性上放了一个断点:在我得到异常之前没有调用它们所以它可能与CustomDbDataReader

编辑:这是堆栈跟踪,按要求:

DbDataReader

1 个答案:

答案 0 :(得分:3)