---
title: "problem med uppdatering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/58155-problem-med-uppdatering"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "andreas_lindh"
published: "2002-11-05T19:16:04.000Z"
updated: "2002-11-11T17:42:06.000Z"
replies: 42
views: 757
page: 1
pages: 3
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/58155-problem-med-uppdatering"
---

# problem med uppdatering

_Sida 1 av 3._

## #1 — andreas_lindh, 2002-11-05T19:16Z

Har denna koden

```
Sub datagrid1_update(sender As Object, E As datagridCommandEventargs)
			
			Dim tblaga as textbox=  E.Item.FindControl("tblag_a")
			Dim laga As String = tblaga.Text
			Dim tblagb as textbox=  E.Item.FindControl("tblag_b")
			Dim lagb As String = tblagb.Text
			Dim tbresultata as textbox=  E.Item.FindControl("tbresultata")
			Dim resultata As String = tbresultata.Text
			Dim tbresultatb as textbox=  E.Item.FindControl("tbresultatb")
			Dim resultatb As String = tbresultatb.Text
			Dim tbtid as textbox=  E.Item.FindControl("tbtid")
			Dim tid As String = tbtid.Text
			Dim tbdag as textbox=  E.Item.FindControl("tbdag")
			Dim dag As String = tbdag.Text
			dim id as integer = Datagrid1.DataKeys(CType(E.Item.ItemIndex, Integer))
			dim objcmd1 as new oledbcommand _
             ("select id, lagid_a, lagid_b, resultat_a, resultat_b from matcher where id=" + id +"", objconn)
			
			dim dr as OleDbdatareader
			objconn.open
			dr =objcmd1.executereader
			while dr.read()
				dim lag1 as integer = dr("lagid_a")
				dim lag2 as integer = dr("lagid_b")
					if dr("resultat_a") =resultata and dr("resultat_b") = resultatb then
						dim strsql as string ="update matcher set dag='" + dag +"',tid='" + tid +"', lagid_a="+ lag1 +",lagid_b="+ lag2 +" where id=" +id +""
						dim objcmd as new oledbcommand(strsql, objconn)

						objcmd.connection.open()
						objcmd.executenonquery()
						objcmd.connection.close()
						datagrid1.Edititemindex =-1
						datagrid1.databind()
					else
						dim strsql1 as string ="update matcher set Resultat_a=" + resultata +",Resultat_b=" + resultatb +", uppdaterad=true where id=" +id +""
						dim objcmd2 as new oledbcommand(strsql1, objconn)

						objcmd2.connection.open()
						objcmd2.executenonquery()
						objcmd2.connection.close()
						datagrid1.Edititemindex =-1
						datagrid1.databind()
					end if
			end while
			objconn.close
			
    End Sub
```

Får detta felmeddalndet:
System.FormatException: Input string was not in a correct format

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

## #2 — renholm, 2002-11-05T20:21Z

Vilken rad?

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

## #3 — Ekström, 2002-11-05T20:23Z

Dessa prylar:

```
 +""
```

 gör ingenting i slutet på dina SQL-satser. Misstänker dock att det inte har något med problemet att göra.

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

## #4 — andreas_lindh, 2002-11-05T20:40Z

rad 52

```
dim objcmd1 as new oledbcommand _
```

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

## #5 — P, 2002-11-05T21:04Z

vet inte om det är hela koden du visar men jag hittar inte att du dimar objconn någonstans

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

## #6 — andreas_lindh, 2002-11-05T21:07Z

Objconn finns med längr upp i koden så det är inte det som är fel.

tar jag bort if satsen och bara gör en vanlig update fungerar det.

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

## #7 — andreas_lindh, 2002-11-06T20:39Z

problemet verkar ligga i where id=" + id +" för när jag skriver where id=1 fungerar det.

> Dessa prylar:
> 
>
>
> ```
> +""
> ```
>
> 
> gör ingenting i slutet på dina SQL-satser. Misstänker dock att det inte har något med problemet att göra.

Jag får felmeddelande om jag tar bort dom

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

## #8 — fredrik, 2002-11-07T09:32Z

Prova att bygga ihop strängen med string.format istället:

```
Dim strsql1 As String = String.Format("update matcher set Resultat_a={0},Resultat_b={1},uppdaterad=true where id={2}", resultata, resultatb, id)
```

Bör ju bli samma resultat, men kolla annars vad strSql1 innehåller och om den ser rätt ut.

Prova isf. att köra resultatet direkt i QA (för SQLserver) eller som en fråga i Access.

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

## #9 — andreas_lindh, 2002-11-07T09:41Z

Provade att köra en fråga i access och då fungerade det.

Problemet är att den klagar på alla rader där jag har med where id=" + id +"

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

## #10 — andreas_lindh, 2002-11-07T09:44Z

```
Dim strsql1 As String = String.Format("update matcher set Resultat_a={0},Resultat_b={1},uppdaterad=true where id={2}", resultata, resultatb, id)
```

Detta fungerade.
Kan jag göra likadant med en select?

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

## #11 — NETwork, 2002-11-07T09:59Z

> **andreas_lindh skrev:**
>
> Provade att köra en fråga i access och då fungerade det.
> 
> Problemet är att den klagar på alla rader där jag har med where id=" + id +"

Japp, det går bra! Jag tycker dock det verkar konstigt att det inte fungerar på det andra sättet också. Exakt vad innehåller "id", har du provat att skriva ut det? Är det inte möjligt att den skriver ut ett id som inte finns? Jag menar, om det fungerar om du skriver id=1 men inte id=" + id så MÅSTE det vara något lustigt med variabeln...

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

## #12 — andreas_lindh, 2002-11-07T10:07Z

När jag skriver ut id med response.write får jag ett id som finns i databasen.

Hur ska select satsen se ut med string.format ?

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

## #13 — fredrik, 2002-11-07T10:43Z

I ditt fall typ:

```
Dim strSQL as String= String.Format("select id, lagid_a, lagid_b, resultat_a, resultat_b from matcher where id={0}", id)
```

Se tidigare inlägg ang. string.format:
<http://www.webforum.nu/showthread.php?s=&postid=423650#post423650>

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

## #14 — andreas_lindh, 2002-11-07T11:01Z

Nu har jag ett nytt problem.

Felmeddelande:
System.InvalidOperationException: The connection is already Open (state=Open, Fetching).
På line 77

```
Sub datagrid1_update(sender As Object, E As datagridCommandEventargs)
			
		Dim tblaga as textbox=  E.Item.FindControl("tblag_a")
		Dim laga As String = tblaga.Text
		Dim tblagb as textbox=  E.Item.FindControl("tblag_b")
		Dim lagb As String = tblagb.Text
		Dim tbresultata as textbox=  E.Item.FindControl("tbresultata")
		Dim resultata As String = tbresultata.Text
		Dim tbresultatb as textbox=  E.Item.FindControl("tbresultatb")
		Dim resultatb As String = tbresultatb.Text
		Dim tbtid as textbox=  E.Item.FindControl("tbtid")
		Dim tid As String = tbtid.Text
		Dim tbdag as textbox=  E.Item.FindControl("tbdag")
		Dim dag As String = tbdag.Text
		dim m_id as integer = Datagrid1.DataKeys(CType(E.Item.ItemIndex, Integer))
		'dim objcmd1 as new oledbcommand("select * from matcher where id="+ m_id +"", objconn)
		Dim strSQL as String= String.Format("select id, lagid_a, lagid_b, resultat_a, resultat_b, dag, tid,slutspel, uppdaterat_resultat from matcher where id={0}", m_id)	
		response.write(strSQL)
		dim objcmd1 as new oledbcommand(strsql, objconn)
		dim dr as OleDbdatareader
		objconn.open
		dr =objcmd1.executereader
			while dr.read()
				dim lag1 as integer = dr("lagid_a")
				dim lag2 as integer = dr("lagid_b")
					if dr("slutspel") = true then
						'Uppdatera bara spelschemat
						Dim strsql3 As String = String.Format("update matcher set lagid_a={0},lagid_b={1},resultat_a{2},resultat_b{3}, dag={4},tid={5} where id={6}", lag1, lag2, resultata, resultatb, dag, tid, m_id) 
						dim objcmd3 as new oledbcommand(strsql, objconn)

						objcmd3.connection.open()
						objcmd3.executenonquery()
						objcmd3.connection.close()
						datagrid1.Edititemindex =-1
						datagrid1.databind()
					else
						if dr("resultat_a") =resultata and dr("resultat_b") = resultatb then
							Dim strsql4 As String = String.Format("update matcher set lagid_a={0},lagid_b={1},dag={2},tid={3} where id={4}", laga, lagb, dag, tid, m_id)
							dim objcmd4 as new oledbcommand(strsql4, objconn)

							[b]objcmd4.connection.open()[/b]
						objcmd4.executenonquery()
							objcmd4.connection.close()
							datagrid1.Edititemindex =-1
							datagrid1.databind()
						else
							if dr("uppdaterat_resultat") = true then
								dim mala as integer = dr("resultat_a")
								dim malb as integer = dr("resultat_b")
								'Ta bort gammlat resultat i tabell
								'Innehåll från upp_tabb2.asp
									if mala > malb then
									
									elseif mala = malb then
									
									else
									
									end if
								'Lägg till nytt resultat i tabell
								'Innehåll från upp_tabb.asp
									if mala > malb then
									
									elseif mala = malb then
									
									else
									
									end if
								' Uppdatera spelschema
								Dim strsql1 As String = String.Format("update matcher set Resultat_a={0},Resultat_b={1},uppdaterad=true where id={2}", resultata, resultatb, m_id)

								dim objcmd2 as new oledbcommand(strsql1, objconn)

								objcmd2.connection.open()
								objcmd2.executenonquery()
								objcmd2.connection.close()
								datagrid1.Edititemindex =-1
								datagrid1.databind()
						
							else
								dim mala as string = resultata
								dim malb as string = resultatb
								'Lägg till nytt resultat i tabell
								'Innehåll från upp_tabb.asp
									if mala > malb then
									
									elseif mala = malb then
									
									else
									
									end if
								' Uppdatera spelschema
								Dim strsql5 As String = String.Format("update matcher set Resultat_a={0},Resultat_b={1},uppdaterad=true where id={2}", resultata, resultatb, m_id)
								dim objcmd5 as new oledbcommand(strsql5, objconn)

								objcmd5.connection.open()
								objcmd5.executenonquery()
								objcmd5.connection.close()
								datagrid1.Edititemindex =-1
								datagrid1.databind()
							end if
						end if
					end if
			end while
		objconn.close
			
    End Sub
```

Rad 77 är den fetstil

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

## #15 — fredrik, 2002-11-07T14:33Z

Eftersom du redan öppnat "objconn" högre upp behöver du inte öppna den igen. Då du deklarerar "objcmd4" med "objconn" i kontruktorn så jobbar den redan mot en öppen Connection.

Du kan alltså ta bort den raden.

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

## #16 — andreas_lindh, 2002-11-07T15:07Z

Får ett nytt felmeddlande när jag tar bort den raden

System.InvalidOperationException: There is already an open DataReader associated with this Connection which must be closed first.
på rad 77
objcmd4.executenonquery()

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

## #17 — fredrik, 2002-11-07T15:15Z

Aha...läste inte din kod så noga innan...

Om du har en DataReader "igång" med ett visst Connection-objekt så kan du inte använda det objektet till något annat så länge DataReadern är öppen.

Du får helt enkelt skapa en Connection till eller se till att stänga DataReadern.

Du kan på ett enkelt sätt skapa en ny connection med:

```
Dim objcmd4 As New OleDb.OleDbCommand(strsql4, New SqlClient.SqlConnection(objconn.ConnectionString))
```

Tycker det låter lite lurigt att det är så här..men då jag själv stött på problemet och inte hittat nån väg runt antar jag att det är så...

...men om nån har nån lösning så posta gärna!

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

## #18 — andreas_lindh, 2002-11-07T15:38Z

låter lit e onödigt att skapa en ny anslutning varje gång.

Borde gå att lösa på något annat sätt

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

## #19 — andreas_lindh, 2002-11-07T17:36Z

```
Dim objcmd4 As New OleDb.OleDbCommand(strsql4, New SqlClient.SqlConnection(objconn.ConnectionString))
```

Fungerar det med access också?

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

## #20 — andreas_lindh, 2002-11-07T21:58Z

Nu har jag löst problemet med anslutningen.

Gjorde så här

```
Dim strsql4 As String = String.Format("update matcher set lagid_a={0},lagid_b={1},dag={2},match_nummer={3}, tid={4} where id={5}", lag1, lag2, dag, match_nummer,tid, m_id)
							response.write(strsql4)
							dim objcmd4 as new oledbcommand(strsql4, objconn)
							
							objconn.close
							objcmd4.connection.open()
							objcmd4.executenonquery()
							objcmd4.connection.close()
							datagrid1.Edititemindex =-1
							datagrid1.databind()
							objconn.open
```

Nytt problem.
System.Data.OleDb.OleDbException: Syntaxfel (operator saknas) i frågeuttrycket '17:30'.
På rad 81
rad 81:objcmd4.executenonquery()

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/58155-problem-med-uppdatering  
Nästa sida: https://www.webforum.nu/amne/dotnet/58155-problem-med-uppdatering/page2.md
