相关疑难解决方法(0)

SqlDataReader的Connection属性为Null

我遇到了一个奇怪的问题,我可以通过调用存储过程返回结果,但代码追溯失败.

public IEnumerable<T> ExecuteStoredProcedure<T>(string storedProcedureName, IDataMapper<T> mapper, IDictionary<string, object> parameters)
{
    using (var connection = new SqlConnection(connectionString))
    {
        using (var cmd = new SqlCommand(storedProcedureName, connection))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            foreach (var key in parameters.Keys)
            {
                cmd.Parameters.AddWithValue(key, parameters[key]);
            }
            connection.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            //return MapRecordsToDTOs(reader, mapper);

            //let's test:
            IEnumerable<T> result = MapRecordsToDTOs(reader, mapper);
            var x = (new List<T>(result)).Count;
            System.Diagnostics.Debug.WriteLine(x);
            return result;
        }
    }
}


private static IEnumerable<T> MapRecordsToDTOs<T>(SqlDataReader reader, IDataMapper<T> mapper)
{
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            System.Diagnostics.Debug.WriteLine(reader["Id"]); //what's …
Run Code Online (Sandbox Code Playgroud)

c# idisposable using sqlconnection sqldatareader

5
推荐指数
1
解决办法
127
查看次数

部分线程安全的字典

我有一个类维护一个Dictionary缓存一些数据的私有实例.

该类使用a从多个线程写入字典ReaderWriterLockSlim.

我想在课外公开字典的值.
什么是线程安全的方法呢?

现在,我有以下内容:

public ReadOnlyCollection<MyClass> Values() {
    using (sync.ReadLock())
        return new ReadOnlyCollection<MyClass>(cache.Values.ToArray()); 
}
Run Code Online (Sandbox Code Playgroud)

有没有办法这样做而不需要多次复制集合?

我正在使用.Net 3.5(不是4.0)

.net c# thread-safety

3
推荐指数
1
解决办法
1099
查看次数