标签: sqldatareader

SQLDataReader行计数

我试图通过迭代读取器获得返回的行数.但是当我运行这段代码时,我总是得到1?我搞砸了吗?

int count = 0;
if (reader.HasRows)
{
    while (reader.Read())
    {
        count++;
        rep.DataSource = reader;
        rep.DataBind();
    }
}
resultsnolabel.Text += " " + String.Format("{0}", count) + " Results";
Run Code Online (Sandbox Code Playgroud)

c# sql sqldatareader

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

如何使用SqlDataReader获取一些值并将其转换为bool?

我正在使用简单查询从数据库中检索用户信息.

select * from dbo.[User] u where u.Email = @email
Run Code Online (Sandbox Code Playgroud)

然后我尝试获取一个名为IsConfirmed的列的值(在数据库中表示为位类型列)并将其转换为bool.

bool isConfirmed = int.Parse(sqlDataReader["IsConfirmed"].ToString()) == 1;
Run Code Online (Sandbox Code Playgroud)

然后我得到一个FormatException错误,指出"输入字符串的格式不正确.".

我看到一个类似的问题,答案提供了这段代码:

bool isConfirmed = sqlDataReader.GetBoolean(0);
Run Code Online (Sandbox Code Playgroud)

但这对我的情况不起作用,因为我不知道IsConfirmed列的索引,我不想知道它.我想使用列名.

c# boolean sqldatareader bit

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

如何从数据库中获取可为空的DateTime

我的SQL Server数据库包含可为空的DateTime值.如何在C#中的应用程序中将它们转换为可以为空的DateTime对象?

这是我认为它会是什么样子,但它没有:

DateTime? dt = (DateTime?) sqldatareader[0];
Run Code Online (Sandbox Code Playgroud)

c# sql-server datetime nullable sqldatareader

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

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
查看次数

从DB读取布尔值?

在C#中,使用SqlDataReader,有没有办法从DB读取布尔值?

while (reader.Read())
{
    destPath = reader["destination_path"].ToString();
    destFile = reader["destination_file"].ToString();
    createDir = reader["create_directory"].ToString();
    deleteExisting = Convert.ToBoolean(reader["delete_existing"]);
    skipIFolderDate = reader["skipifolderdate"].ToString();
    useTempFile = reader["useTempFile"].ToString();
    password = reader["password"].ToString();
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,delete_existing在DB中始终为1或0.我在MSDN上读到,Convert.ToBoolean()不接受1或0作为有效输入.它只接受真或假.有没有其他方法将DB值转换为bool?或者我是否需要在SqlDataReader之外执行此操作?

另外,我无法更改数据库值,所以请不要回答"将数据库值从1和0更改为true和false".

谢谢!

.net c# sqldatareader

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

仅强制从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万
查看次数

如何让DataReader从一开始就重新开始阅读?

dr.Read();如果条件满足,如何从头开始重读?就像是:

SqlDataReader dr = command.ExecuteReader();
for(int i=0; dr.Read() ; i++){
    if(condition ){
        //let dr.Read() start reading from the beginning
    }
}
Run Code Online (Sandbox Code Playgroud)

c# sql database sqldatareader winforms

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

如何在asp.net mvc视图中显示数据库记录

使用ASP.NET MVC和C#,如何将一些数据库记录传递给View并以表格形式显示它们?

我需要知道如何从已返回到SqlDataReader对象的数据库传输/传递一些记录行,并将该对象传递给View,这样我就可以使用foreach显示View中对象所包含的所有记录.

以下代码是我正在尝试做的事情.但它不起作用.

控制者:

public ActionResult Students()
{
    String connectionString = "<THE CONNECTION STRING HERE>";
    String sql = "SELECT * FROM students";
    SqlCommand cmd = new SqlCommand(sql, connectionString);

    using(SqlConnection connectionString = new SqlConnection(connectionString))
    {
        connectionString.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
    }

    ViewData.Add("students", rdr);

    return View();
}
Run Code Online (Sandbox Code Playgroud)

风景:

<h1>Student</h1>

<table>
    <!-- How do I display the records here? -->
</table>
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc sqldatareader sqlclient

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

EF中的连通模型和断开模型

我对连接模型和实体框架中的断开连接很困惑.

我使用的是传统的ADO.net(DataReader用于连接模型和DataAdapter断开连接的模型),当我需要发送更多用户需要更新或插入以及在几种情况下断开模型时,我知道我使用连接模型数据到其他进程对内存中的数据进行一些操作并将它们发送回数据库.

现在我在EF中阅读了一些关于连接模型和断开连接模型的文章,我很困惑为什么要将实体明确地附加到断开连接模型中的上下文?我还读过web中的默认行为是断开连接的模型,而WPF中的默认行为是连接模型!


  • 有人能用简单的方式解释现实生活中的两个模型之间的区别吗?
  • 我们如何用简单的例子来处理EF中的两个模型?
  • 应用程序的类型(Web表单,MVC,WPF,WCF)与EF中使用的专用模型之间是否存在关系?
  • 何时使用连接模型以及何时使用断开模型(使用EF)?

asp.net ado.net entity-framework sqldatareader sqldataadapter

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

收益率与收益率IEnumerable <T>

我注意到从IDataReader使用声明中读取一些我无法理解的好奇心.虽然我确信答案很简单.

为什么在内部using (SqlDataReader rd) { ... }如果我直接执行一个yield return阅读器在阅读期间保持打开状态.但是,如果我执行直接return调用SqlDataReader扩展方法(如下所述),读者在枚举可以实现之前关闭?

public static IEnumerable<T> Enumerate<T>(this SqlDataReader rd)
{
    while (rd.Read())
        yield return rd.ConvertTo<T>(); //extension method wrapping FastMember

    rd.NextResult();
}
Run Code Online (Sandbox Code Playgroud)

为了完全清楚我在问什么,我不确定为什么以下内容根本不同:

一个充实的例子,根据@ TimSchmelter的要求:

/*
 * contrived methods
 */
public IEnumerable<T> ReadSomeProc<T>() {
    using (var db = new SqlConnection("connection string"))
    {
        var cmd = new SqlCommand("dbo.someProc", db);

        using(var rd = cmd.ExecuteReader())
        {
            while(rd.Read())
                yield return rd.ConvertTo<T>(); //extension method wrapping FastMember
        }
    }
}


//vs
public IEnumerable<T> ReadSomeProcExt<T>() …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable ado.net sqldatareader yield-return

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