sawMedlem sedan mars 20011 883 inlägg
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?
freguzMedlem sedan feb. 2005282 inlägg
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
sawMedlem sedan mars 20011 883 inlägg
Enligt vad jag har läst så skall man använda sig av ?, är det fel menar du?
freguzMedlem sedan feb. 2005282 inlägg
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
sawMedlem sedan mars 20011 883 inlägg
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.
sawMedlem sedan mars 20011 883 inlägg
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(
PMedlem sedan jan. 20012 107 inlägg
"Det gick inte att konvertera parametervärdet från en DateTime till en
TimeSpan." Där har du felet. Kontrollera dina värden.
invecklarenMedlem sedan jan. 2008270 inlägg
Kodrad ska du ändra:
insertCommand.Parameters.Add(new OleDbParameter("@startTid", OleDbType.DBTime));
insertCommand.Parameters["@startTid"].Value = TimePicker1.SelectedTime;
sawMedlem sedan mars 20011 883 inlägg
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...
sawMedlem sedan mars 20011 883 inlägg
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???
PMedlem sedan jan. 20012 107 inlägg
På rad 7 har du en DBTime fortfarande.
sawMedlem sedan mars 20011 883 inlägg
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
@ndersMedlem sedan juni 200026 914 inlägg
0000:00:00 är inget giltigt datum / ingen giltig tid.
Varför inte lagra NULL?
sawMedlem sedan mars 20011 883 inlägg
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.