---
title: "Problem med OleDbParameter och insert"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/170048-problem-med-oledbparameter-och-insert"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "saw"
published: "2008-03-19T11:22:59.000Z"
updated: "2008-03-19T20:22:57.000Z"
replies: 13
views: 943
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/170048-problem-med-oledbparameter-och-insert"
---

# Problem med OleDbParameter och insert

## #1 — saw, 2008-03-19T11:22Z

Jag försöker nu så långt som möjligt att använda mig av OleDbParameter men
vid min insert så stöter jag på patrul.
Först error text(som jag enbart fick fram via try/catch.

```
Anslutningen stängdes inte. Anslutningens aktuella status är öppen.
```

Koden (tyvärr lite lång) ser ut så här:

```
try
        {
            DBConn.Close();
            sql = "INSERT INTO t_Order (KundNr, AnstNr, tjanst, startDatum, 
startTid, slutDatum, slutTid, antalTimmar, Klart, Beskrivning) VALUES 
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

            OleDbCommand cmd = new OleDbCommand("", DBConn);
            cmd.CommandText = sql;

            OleDbParameter paramKundNr = new OleDbParameter("@KundNr", DbType.String);
            paramKundNr.Value = LKundNr.Text;
            cmd.Parameters.Add(paramKundNr);

            OleDbParameter paramAnstNr = new OleDbParameter("@AnstNr", DbType.String);
            paramAnstNr.Value = LAnstNr.Text;
            cmd.Parameters.Add(paramAnstNr);

            OleDbParameter paramtjanst = new OleDbParameter("@tjanst", DbType.String);
            paramtjanst.Value = ListBox1.SelectedValue.ToString();
            cmd.Parameters.Add(paramtjanst);

            OleDbParameter paramstartDatum = new OleDbParameter("@startDatum", DbType.DateTime);
            paramstartDatum.Value = CalendarPopup1.SelectedDate.ToShortDateString();
            cmd.Parameters.Add(paramstartDatum);

            OleDbParameter paramstartTid = new OleDbParameter("@startTid", DbType.DateTime);
            paramstartTid.Value = TimePicker1.SelectedTime.ToShortTimeString();
            cmd.Parameters.Add(paramstartTid);
            DBConn.Open();

            OleDbParameter paramslutDatum = new OleDbParameter("@slutDatum", DbType.DateTime);
            paramslutDatum.Value = CalendarPopup2.SelectedDate.ToShortDateString();
            cmd.Parameters.Add(paramslutDatum);

            OleDbParameter paramslutTid = new OleDbParameter("@slutTid", DbType.DateTime);
            paramslutTid.Value = TimePicker2.SelectedTime.ToShortTimeString();
            cmd.Parameters.Add(paramslutTid);

            OleDbParameter paramantalTimmar = new OleDbParameter("@antalTimmar", DbType.DateTime);
            paramantalTimmar.Value = 0;
            cmd.Parameters.Add(paramantalTimmar);

            OleDbParameter paramKlart = new OleDbParameter("@Klart", DbType.Boolean);
            paramKlart.Value = false;
            cmd.Parameters.Add(paramKlart);

            OleDbParameter paramBeskrivning = new OleDbParameter("@Beskrivning", DbType.String);
            paramBeskrivning.Value = false;
            cmd.Parameters.Add(paramBeskrivning);

            DBConn.Open();
            cmd.ExecuteNonQuery();
            DBConn.Close();
        }
        catch (Exception fel)
        {
            TextBox2.Text = fel.Message;
        }
        DBConn.Close();
```

Som ni förstår så sparas ingen data i databasen.Vad gör jag för fel?

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

## #2 — freguz, 2008-03-19T11:26Z

Först tycker jag man bör ha med stack trace så man ser vilken rad

```
TextBox2.Text = fel.Message + fel.StackTrace;
```

Sen är det enklare och tydligare om man anger @Beskrivning istället för ? i sql-satsen

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

## #3 — saw, 2008-03-19T11:43Z

Enligt vad jag har läst så skall man använda sig av ?, är det fel menar du?

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

## #4 — freguz, 2008-03-19T11:47Z

Det går säkert bra med ?, bara det att jag vill se vilka param jag placerar vart i sql satsen, och med ? måste väl param komma i rätt ordningsföljd? 

Eftersom ditt fel kanske inte alls har med det att göra så kanske jag ska sluta yra om det nu :bire

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

## #5 — saw, 2008-03-19T12:31Z

Nu har jag fått lite mera kött på benen.
I början av denna class så ser jag till att min DBConn.close()

```
Anslutningen stängdes inte. Anslutningens aktuella status är öppen.    vid 
System.Data.ProviderBase.DbConnectionInternal.OpenConnection
(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   vid System.Data.OleDb.OleDbConnection.Open()
   vid Admin_Order_Order.saveData() i c:\Inetpub\wwwroot\Mkef\Admin\Order\Order.aspx.cs:rad 308
```

Om jag tar bort DBConn.close()

```
Anslutningen stängdes inte. Anslutningens aktuella status är öppen.    vid 
System.Data.ProviderBase.DbConnectionInternal.OpenConnection
(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   vid System.Data.OleDb.OleDbConnection.Open()
   vid Admin_Order_Order.saveData() i 
c:\Inetpub\wwwroot\Mkef\Admin\Order\Order.aspx.cs:rad 308
```

Vad jag kan se gör det ingen skillnad.
Jag har dessutom varit noga med att använda mig av DBConn.Close() i alla
classer där jag använder DBConn.

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

## #6 — saw, 2008-03-19T15:51Z

Jag har gjort ett nytt försök på ett annat sätt:

```
            sql = "INSERT INTO t_Order (KundNr, AnstNr, tjanst, startDatum, 
startTid, slutDatum, slutTid, antalTimmar, Klart, Beskrivning) VALUES 
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            //***********************

            OleDbCommand insertCommand = new OleDbCommand(sql, DBConn);
            insertCommand.Parameters.Add(new OleDbParameter("@KundNr", OleDbType.VarChar));
            insertCommand.Parameters["@KundNr"].Value = LKundNr.Text;

            insertCommand.Parameters.Add(new OleDbParameter("@AnstNr", OleDbType.VarChar));
            insertCommand.Parameters["@AnstNr"].Value = LAnstNr.Text;

            insertCommand.Parameters.Add(new OleDbParameter("@tjanst", OleDbType.VarChar));
            insertCommand.Parameters["@tjanst"].Value = ListBox1.SelectedValue.ToString();

            insertCommand.Parameters.Add(new OleDbParameter("@startDatum", OleDbType.DBDate));
            insertCommand.Parameters["@startDatum"].Value = CalendarPopup1.SelectedDate;

            insertCommand.Parameters.Add(new OleDbParameter("@startTid", OleDbType.DBTime));
            insertCommand.Parameters["@startTid"].Value = TimePicker1.SelectedTime;

            insertCommand.Parameters.Add(new OleDbParameter("@slutDatum", OleDbType.DBDate));
            insertCommand.Parameters["@slutDatum"].Value = CalendarPopup2.SelectedDate;

            insertCommand.Parameters.Add(new OleDbParameter("@slutTid", OleDbType.DBTime));
            insertCommand.Parameters["@slutTid"].Value = TimePicker2.SelectedTime;

            insertCommand.Parameters.Add(new OleDbParameter("@antalTimmar", OleDbType.DBTime));
            insertCommand.Parameters["@antalTimmar"].Value = 0;

            insertCommand.Parameters.Add(new OleDbParameter("@Klart", OleDbType.Boolean));
            insertCommand.Parameters["@Klart"].Value = false;

            insertCommand.Parameters.Add(new OleDbParameter("@Beskrivning", OleDbType.VarChar));
            insertCommand.Parameters["@Beskrivning"].Value = TextBox2.Text;

            DBConn.Open();
            insertCommand.ExecuteNonQuery();
            DBConn.Close();
```

..men får foljande error:

```
Det gick inte att konvertera parametervärdet från en DateTime till en 
TimeSpan.    vid System.Data.OleDb.OleDbParameter.CoerceValue(Object 
value, NativeDBType destinationType)
   vid System.Data.OleDb.OleDbParameter.BindParameter(Int32 index, 
Bindings bindings)
   vid System.Data.OleDb.OleDbCommand.CreateAccessor()
   vid System.Data.OleDb.OleDbCommand.InitializeCommand(CommandBehavior behavior, Boolean throwifnotsupported)
   vid System.Data.OleDb.OleDbCommand.ExecuteCommand
(CommandBehavior behavior, Object& executeResult)
   vid System.Data.OleDb.OleDbCommand.ExecuteReaderInternal
(CommandBehavior behavior, String method)
   vid System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   vid Admin_Order_Order.saveData() i 
c:\Inetpub\wwwroot\Mkef\Admin\Order\Order.aspx.cs:rad 300
```

Skall det vara så omöjligt att få till detta.
Trots era protester så verkar det snart som om jag får gå tillbaka
till mitt gammla sätt och skriva SQL på...  x(

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

## #7 — P, 2008-03-19T16:41Z

"Det gick inte att konvertera parametervärdet från en DateTime till en 
TimeSpan." Där har du felet. Kontrollera dina värden.

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

## #8 — invecklaren, 2008-03-19T17:10Z

Kodrad ska du ändra:

   insertCommand.Parameters.Add(new OleDbParameter("@startTid", OleDbType.DBTime));
            insertCommand.Parameters\["@startTid"\].Value = TimePicker1.SelectedTime;

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

## #9 — saw, 2008-03-19T17:45Z

Jo att det är där jag skall ändra det förstår jag, men till vad???
Jag borde väll rimligen kunna använda mig av TimePicker1.SelectedTime...

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

## #10 — saw, 2008-03-19T18:08Z

Nu försökte jag så här:

```
insertCommand.Parameters.Add(new OleDbParameter("@slutDatum", 
OleDbType.DBDate));
            insertCommand.Parameters["@slutDatum"].Value = 
Convert.ToDateTime(CalendarPopup2.SelectedDate.ToShortDateString());

            insertCommand.Parameters.Add(new OleDbParameter("@slutTid", 
OleDbType.DBTime));
            insertCommand.Parameters["@slutTid"].Value = Convert.ToDateTime
(TimePicker2.SelectedTime.ToShortTimeString());
```

och får fotfarande..

```
Det gick inte att konvertera parametervärdet från en DateTime till en 
TimeSpan.    vid System.Data.OleDb.OleDbParameter.CoerceValue(Object 
value, NativeDBType destinationType)
   vid System.Data.OleDb.OleDbParameter.BindParameter(Int32 index, 
Bindings bindings)
   vid System.Data.OleDb.OleDbCommand.CreateAccessor()
   vid System.Data.OleDb.OleDbCommand.InitializeCommand
(CommandBehavior behavior, Boolean throwifnotsupported)
   vid System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   vid System.Data.OleDb.OleDbCommand.ExecuteReaderInternal
(CommandBehavior behavior, String method)
   vid System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   vid Admin_Order_Order.saveData() i c:\Inetpub\wwwroot\Mkef\Admin\Order\Order.aspx.cs:rad 300
```

..dags för mig att lägga av???

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

## #11 — P, 2008-03-19T19:00Z

På rad 7 har du en DBTime fortfarande.

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

## #12 — saw, 2008-03-19T19:31Z

Nu börjar det att hända saker.

```
string td = TimePicker1.SelectedTime.ToShortTimeString();
            insertCommand.Parameters.Add(new OleDbParameter("@startTid", 
OleDbType.DBTime));
            insertCommand.Parameters["@startTid"].Value = @TimeSpan.Parse(td);
```

Men nu kommer nya problem.
Om jag vet stardatum(naturligtvis) men inte slutdatum, så ville jag att det
skulle skrivas ut som "0000:00:00", men jag misslyckas klart...

```
DateTime dDate;
            if (CalendarPopup2.SelectedDate > CalendarPopup1.SelectedDate)
                dDate = CalendarPopup2.SelectedDate;
            else
                dDate = Convert.ToDateTime("0000:00:00");<-----detta tycker han inte om

            insertCommand.Parameters.Add(new OleDbParameter("@slutDatum", 
OleDbType.DBDate));
            insertCommand.Parameters["@slutDatum"].Value = @TimeSpan.Parse
(dDate.ToShortDateString());
```

Error

```
Strängen identifierades inte som en giltig DateTime-sträng.    vid 
System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, 
DateTimeStyles styles)
   vid System.DateTime.Parse(String s, IFormatProvider provider)
   vid System.Convert.ToDateTime(String value)
   vid Admin_Order_Order.saveData() i c:\Inetpub\wwwroot\Mkef\Admin\Order\Order.aspx.cs:rad 289
```

Är jag helt ute och seglar

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

## #13 — @nders, 2008-03-19T19:37Z

0000:00:00 är inget giltigt datum / ingen giltig tid.
Varför inte lagra NULL?

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

## #14 — saw, 2008-03-19T20:22Z

Hej @nders.
Det har jag försökt med men får då värdet i databasen "2001-01-01", och det är ju
inget vidare snyggt.
Det är vid if-satsen som du kan se här ovan som jäklas med mig.

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

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/170048-problem-med-oledbparameter-och-insert
