---
title: "Datareader"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/169178-datareader"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "icaaq"
published: "2008-02-18T19:50:22.000Z"
updated: "2008-02-19T12:22:17.000Z"
replies: 5
views: 647
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/169178-datareader"
---

# Datareader

## #1 — icaaq, 2008-02-18T19:50Z

Tjenare, jag har denna kod....

```
                OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["floorball"].ConnectionString);
                string sql = "SELECT pk_id FROM tbl_week WHERE pk_id="+txtDate.SelectedValue;
                OleDbCommand cmd = new OleDbCommand(sql, con);
                cmd.Connection.Open();
                OleDbDataReader dr = cmd2.ExecuteReader(CommandBehavior.CloseConnection);
                if(dr2.HasRows){
                    [b]Response.Write(dr2[0]);[/b]
                }
```

Men jag får "System.InvalidOperationException: No data exists for the row/column." på den feta raden. Någon som har ett snabbt svar?

Jag har testat Sql:en och jag får ut data av den....

mv icaaq

Permalänk: https://www.webforum.nu/p/169178

## #2 — Zaiman, 2008-02-18T20:04Z

Har för mig att man måste "läsa in" raden först, innan du kan skriva ut den.

```
dr.Read();
```

Permalänk: https://www.webforum.nu/p/2083656

## #3 — icaaq, 2008-02-18T20:07Z

Tack, det var ett tag sedan jag höll på med detta..

mv icaaq

Permalänk: https://www.webforum.nu/p/2083657

## #4 — Gladh, 2008-02-19T06:11Z

> **icaaq skrev:**
>
> if(dr2.HasRows){
>     Response.Write(dr2\[0\]);

Om du använder dig av dr2.Read() så behöver du inte använda dig av HasRows eftersom Read returnerer true om det finns något att läsa, och false om inget finns.

```
                if(dr2.Read()){
                    Response.Write(dr2[0]);
                }
```

Sedan så är det väldigt ANTI-.NET att använda sig av Response.Write i ASP.NET, du skall istället ha en Label som du sätter värdet till.

Dessutom om du bara skall ha ut ett enda värde från databasen så är det lite overkill att använda ExecuteReader, så fall är det bättre med ExecuteScalare, som kommer att returnera ditt pk_id som ett object till dig.

```
                OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["floorball"].ConnectionString);
                string sql = "SELECT pk_id FROM tbl_week WHERE pk_id="+txtDate.SelectedValue;
                OleDbCommand cmd = new OleDbCommand(sql, con);
               try{
                cmd.Connection.Open();
                object pkID = cmd2.ExecuteScalare();
                
                lblMyPKID.Text = pkID.ToString();
}finally{
cmd.Connection.Close();
}
                }
```

Permalänk: https://www.webforum.nu/p/2083708

## #5 — Travoni, 2008-02-19T07:37Z

... det heter **ExecuteScalar** och inget annat. ;)

Permalänk: https://www.webforum.nu/p/2083714

## #6 — freguz, 2008-02-19T12:22Z

**Redigerat med anledning av [webForums regler §4](http://www.webforum.nu/faq.php?faq=about_wf#rules_4)**.
Synpunkter angående detta beslut, ta kontakt med [Zaiman](http://www.webforum.nu/sendmessage.php?do=mailmember&u=2951) alternativt <forumledare@webforum.nu>.

Zaiman
Moderator, webForum

Permalänk: https://www.webforum.nu/p/2083768

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/169178-datareader
