标签: datareader

DataReader - 硬编码序数?

DataReaderI 返回数据时,通常会使用序号引用DataReader来获取相关列:

if (dr.HasRows)         
   Console.WriteLine(dr[0].ToString());
Run Code Online (Sandbox Code Playgroud)

要么

if (dr.HasRows)         
   Console.WriteLine(dr.GetString(0));
Run Code Online (Sandbox Code Playgroud)

要么

if (dr.HasRows)         
   Console.WriteLine((string)dr[0]);
Run Code Online (Sandbox Code Playgroud)

我一直这样做是因为我在早期阶段被告知使用dr["ColumnName"]或更优雅的索引方式会导致性能下降.

然而,尽管对数据实体的所有引用都变得越来越强烈,但我对此感到更加不安.我也知道上面没有检查DBNull.

从数据库中返回数据最有效的方法是DataReader什么?

.net c# datareader sqldatareader

15
推荐指数
2
解决办法
3891
查看次数

仅强制从DataReader返回单行

我似乎在我的代码中写了这么多:

using (var reader = cmd.ExecuteReader())
{
    if (reader.Read())
    {
        result = new User((int)reader["UserId"], reader["UserName"].ToString());
    }

    if (reader.Read())
    {
        throw new DataException("multiple rows returned from query");
    }
}
Run Code Online (Sandbox Code Playgroud)

有一些内置的方法可以做到这一点我不知道吗?

.net c# ado.net datareader sqldatareader

14
推荐指数
2
解决办法
3万
查看次数

如何处理多个ResultSet,每个ResultSet有多个行?IDataReader.NextResult()结束Read()

如何处理多个ResultSet,每个ResultSet有多个行?NextResult()打破while循环的调用.

我的一些SP返回多个ResultSet.我正在处理这些,NextResult()但是当我这样做并且我的SP只有一个ResultSet时,我看到带有Read()的while循环完成后只剩下第一行.

没有调用NextResult()我得到第一个ResultSet的所有行,但当然第二个和后续的ResultSet不会被处理?

using (IDataReader reader = storedProcedure.ExecuteReader(
    CommandBehavior.CloseConnection, parameterNames as string[], arguments))
{
    while (reader.Read())
    {
        ArrayList row = new ArrayList();
        for (int j = 0; j < reader.FieldCount; ++j)
        {
            object rowValue = reader.GetValue(j);

            row.Add(rowValue);
        }

        reader.NextResult();//next resultset, breaks out of the  while
    }
}
Run Code Online (Sandbox Code Playgroud)

c# stored-procedures datareader

13
推荐指数
1
解决办法
1万
查看次数

DataReader.GetFieldType返回null

在我的数据库表布局中,有一个列类型为hierarchyid(列索引= 4).在尝试设置新环境(从XEN服务器创建的虚拟Web服务器),然后运行该站点时,我遇到了这个问题:

异常消息:DataReader.GetFieldType(4)返回null.异常数据:System.Collections.ListDictionaryInternal

我做了一些搜索,发现已经有一些话题了(比如在MSDN上).

但即使我添加了C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll库,似乎结构SqlHierarchyId中的db类型也无法识别.

"DataReader.GetFieldType(4)返回null的异常"仍然被抛出.

注意:如果我将VS2010中的C#软件包安装到环境(Windows Server 2008 RC2)上,问题将得到解决,但我的老板不接受,因为这纯粹是一个简单的Web服务器.

sql sql-server datareader

13
推荐指数
3
解决办法
2万
查看次数

与复合C#对象映射器的通用关系

我有以下能够映射Reader到简单对象的代码.麻烦在于对象是复合的,它无法映射.如果它是一个类本身,我无法通过检查属性来执行递归

prop.PropertyType.IsClass as Type需要调用DataReaderMapper().有关如何实现这一点或其他方法的任何想法?此外,目前我不想使用任何ORM.

public static class MapperHelper
{

    /// <summary>
    /// extension Method for Reader :Maps reader to type defined
    /// </summary>
    /// <typeparam name="T">Generic type:Model Class Type</typeparam>
    /// <param name="dataReader">this :current Reader</param>
    /// <returns>List of Objects</returns>
    public static IEnumerable<T> DataReaderMapper<T>(this IDataReader dataReader)where T : class, new()
    {
        T obj = default(T);

        //optimized taken out of both foreach and while loop
        PropertyInfo[] PropertyInfo;
        var temp = typeof(T);
        PropertyInfo = temp.GetProperties();

        while (dataReader.Read())
        {  
            obj = …
Run Code Online (Sandbox Code Playgroud)

c# datareader

13
推荐指数
1
解决办法
810
查看次数

WinRT目标多字节代码页中不存在Unicode字符的映射

我试图在我的Windows 8商店应用程序中读取文件.这是我用来实现此目的的代码片段:

        if(file != null)
        {
            var stream = await file.OpenAsync(FileAccessMode.Read);
            var size = stream.Size;
            using(var inputStream = stream.GetInputStreamAt(0))
            {
                DataReader dataReader = new DataReader(inputStream);
                uint numbytes = await dataReader.LoadAsync((uint)size);
                string text = dataReader.ReadString(numbytes);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但是,在行中抛出一个例外:

string text = dataReader.ReadString(numbytes);
Run Code Online (Sandbox Code Playgroud)

执行消息:

No mapping for the Unicode character exists in the target multi-byte code page.
Run Code Online (Sandbox Code Playgroud)

我怎么得到这个?

file-io datareader windows-8 windows-runtime

12
推荐指数
2
解决办法
8313
查看次数

DataReader [i] vs DataReader.GetValue(i)vs DataReader.GetString(i)

dataReader[i]
Run Code Online (Sandbox Code Playgroud)

在逻辑上相当于

dataReader.GetValue(i)
Run Code Online (Sandbox Code Playgroud)

它们是一样的吗?他们不一样吗?是否存在一种适合另一种情况的情况?

不同的记录:

  • 获取位于指定索引处的列
  • 返回指定字段的值.

但是当我使用它们时,它们都会返回该字段的值."获得专栏"是什么意思?"归还一个领域的价值"是什么意思?


奖金Chatter:

我打电话的时候:

reader[i];
reader.GetValue(i);
reader.GetString(i);
Run Code Online (Sandbox Code Playgroud)

String每次都得到一个

.net ado.net datareader

11
推荐指数
1
解决办法
6343
查看次数

DataReader:指定的强制转换无效(Int32)

为什么在将0转换为整数时SqlDataReader会抛出异常?

?dataReader(3)
0 {Short}
    Short: 0
?dataReader.GetInt16(3)
0
?dataReader.GetInt32(3)
{"Specified cast is not valid."}
    _HResult: -2147467262
    _message: "Specified cast is not valid."
    Data: {System.Collections.ListDictionaryInternal}
    HelpLink: Nothing
    HResult: -2147467262
    InnerException: Nothing
    IsTransient: False
    Message: "Specified cast is not valid."
    Source: "System.Data"
    StackTrace: "   at System.Data.SqlClient.SqlBuffer.get_Int32()     
                    at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)"
    TargetSite: {Int32 get_Int32()}
Run Code Online (Sandbox Code Playgroud)

.net datareader sqldatareader

11
推荐指数
1
解决办法
2万
查看次数

通过OracleDataReader读取时处理NULL值?

我正在研究我的第一个ASP.Net应用程序,并且似乎遇到了很多障碍(主要是在WinForms背景下,最近有一个MVC5项目).

我正在使用OracleCommand并执行我的查询成功建立数据库连接,但是当我尝试读取行时,我Column contains NULL value在第二行获取了一个odr.GetDecimal(1).任何人都知道在阅读OracleDataReader时如何处理空值?

以下是我的代码:

        List<YearsOfService> yearsOfService = new List<YearsOfService>();
        string SQL = "SELECT SCHOOL_YEAR as YEAR, " +
                            "TOTAL_SERVICE_CREDIT as ServiceCredited, " +
                            "RETIREMENT_SALARY as Salary, " +
                            "SOURCE_VALUE as CoveredEmployer " +
                     "FROM " + Schema + ".RANDOM_ORACLE_TABLE a " +
                     "WHERE MEMBER_ACCOUNT_ID = :memberAccountId";

        DbConnection dbc = new DbConnection();
        OracleCommand cmd = dbc.GetCommand(SQL);
        cmd.Parameters.Add(new OracleParameter("memberAccountId", memberAccountId));
        OracleDataReader odr = cmd.ExecuteReader();

        int counter = 0;
        if (odr.HasRows)
        {
            while (odr.Read())
            { …
Run Code Online (Sandbox Code Playgroud)

c# asp.net oracle null datareader

11
推荐指数
1
解决办法
1万
查看次数

与DataReader一起使用时,输出参数不可读

当使用DataReader对象通过存储过程从数据库(例如SQL Server)访问数据时,在执行之前添加到Command对象的任何输出参数在读取后都不会被填充.我可以很好地读取行数据,以及所有输入参数,但不能读取输出参数.

.net parameters ado.net stored-procedures datareader

10
推荐指数
1
解决办法
6331
查看次数