---
title: "Problem med lagrad procedur"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/101749-problem-med-lagrad-procedur"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "margar-0"
published: "2004-04-18T09:55:38.000Z"
updated: "2004-04-20T17:02:00.000Z"
replies: 14
views: 397
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/101749-problem-med-lagrad-procedur"
---

# Problem med lagrad procedur

## #1 — margar-0, 2004-04-18T09:55Z

Jag har en klass där jag bla uppdaterar nyheter som i exemplet nedan. Problemet är att jag får fel vid raden objAdapter.Update(ds, "Nyheter"). 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Dynamic SQL generation is not supported against a SelectCommand that does not return any base table information.

Skriver jag en vanlig SELECT-sats fungerar det.

Så här ser min lagrade procedur ut:
SELECT \* FROM Nyheter WHERE id = \[@id\];

Använder access som databas.

Varför fungerar det inte med lagrad procedur eller har jag glömt något?

```
Public Function uppdateraNyhet() As DataSet
        Dim connection As New clsDatabas
        Dim cn As OleDbConnection

        cn = connection.connectionString

        Dim objCmd As New OleDbCommand
        objCmd.CommandText = "SelectNyhetId"
        objCmd.Connection = cn
        objCmd.CommandType = CommandType.StoredProcedure
        objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id

        Dim objAdapter As New OleDbDataAdapter
        objAdapter.SelectCommand = objCmd

        Dim objCommandBuilder As New OleDbCommandBuilder(objAdapter)

        Dim ds As New DataSet
        objAdapter.Fill(ds, "Nyheter")

        ds.Tables("Nyheter").Rows(0).Item("rubrik") = rubrik
        ds.Tables("Nyheter").Rows(0).Item("nyhet") = nyhet

        objAdapter.Update(ds, "Nyheter")

        Return ds
    End Function
```

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

## #2 — Dino, 2004-04-18T10:01Z

```
SELECT * FROM Nyheter WHERE id = [?];
```

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

## #3 — margar-0, 2004-04-18T10:33Z

Ska jag ändra lagrade proceduren till denna:
SELECT \* FROM Nyheter WHERE id = \[?\];

Och hur ska fortsättningen av koden se ut för att få in id till sql-satsen?

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

## #4 — Dino, 2004-04-18T10:36Z

Det är så din procedur skall se ut. Frågetecknet är en placeholder för din parameter.

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

## #5 — PDahlen, 2004-04-18T10:49Z

Eftersom inlägget var irrelevant tar jag bort det. :)

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

## #6 — Dino, 2004-04-18T10:51Z

> **margar-0 skrev:**
>
> Använder **access** som databas.

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

## #7 — PDahlen, 2004-04-18T10:53Z

Sorry. :)
Och jag som kollade så noga efter om det stod access nånstans. :)

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

## #8 — Dino, 2004-04-18T10:57Z

Även alla OleDb i trådskaparens kod borde gett dig en ledtråd. ;)

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

## #9 — margar-0, 2004-04-18T11:40Z

Men hur ska jag skriva i koden för att ge parametern ett id utifrån det översta inlägget?

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

## #10 — Vimp, 2004-04-19T06:35Z

```
SELECT * FROM Nyheter WHERE id = [?] ORDER BY id DESC;
```

Om du bara vill ha det senaste..

```
SELECT TOP 1 * FROM Nyheter WHERE id = [?] ORDER BY id DESC;
```

Samt om det endast är det senaste id-numret du vill ha:

```
SELECT TOP 1 id FROM Nyheter WHERE id = [?] ORDER BY id DESC;
```

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

## #11 — margar-0, 2004-04-19T13:37Z

Jag vet att detta är den lagrade proceduren
SELECT \* FROM Nyheter WHERE id = \[?\];

Men hur ska jag skriva i koden för att ge id ett värde:

```
...
objCmd.CommandType = CommandType.StoredProcedure
        objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id
...
se ovan för fullständig kod
```

Skriver jag så här funkar det utan lagrad procedur, men jag vill köra med lagrade procedurer:

```
'id hämtar värdet från klassen
objCmd.CommandText = "SELECT * FROM Nyheter WHERE id = @id"
        objCmd.Connection = cn
        objCmd.Parameters.Add("@id",  id)
```

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

## #12 — Josef, 2004-04-19T18:41Z

```
OleDbCommand objCmd = new OleDbCommand("[i]<namnet på din sp>[/i]", cn);
objCmd.CommandType = CommandType.StoredProcedure;

objCmd.Parameters.Add("@id", txtId.Text, OleDbType.Integer);
```

Sedan undrar jag varför du har skrivit \[?\] i din procedure. Skriv istället @id så borde det väl fungera?

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

## #13 — margar-0, 2004-04-20T13:29Z

Om alla tittar på det översta inlägget och utgår ifrån det. Jag har den lagrade proceduren som du beskriver (kolla högst upp).

Är det ingen som har varit med om liknande fel:

Detta funkar:

```
Dim objCmd As New OleDbCommand
        objCmd.CommandText = "SELECT * FROM Nyheter WHERE id = " & id & ""
        objCmd.Connection = cn
```

Detta funkar inte, varför?

```
'id hämtar värdet från klassen
        Dim objCmd As New OleDbCommand
        objCmd.CommandText = "SelectNyhetId"
        objCmd.Connection = cn
        objCmd.CommandType = CommandType.StoredProcedure
        objCmd.Parameters.Add("@id", OleDbType.Integer).Value = id
```

Tror det blir fel vi parametern.

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

## #14 — Josef, 2004-04-20T15:58Z

Hur ser "SelectNyhetID" ut då?

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

## #15 — margar-0, 2004-04-20T17:02Z

Så här ser min lagrade procedur ut:
SELECT \* FROM Nyheter WHERE id = \[@id\];

Använder access som databas.

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/101749-problem-med-lagrad-procedur
