Avatar billede cocococo Praktikant
26. maj 2009 - 11:28 Der er 10 kommentarer og
1 løsning

opdaterer ikke databasen

dt og deliverdate er af typen DateTime

linien herunder køres uden problemer , der sker bare ikke noget i databasen


strSQL = "UPDATE serial_nr SET deliverdate='"+ dt +"' Where serial='"+ serial.Text.ToString() + "'";
Avatar billede aaberg Nybegynder
26. maj 2009 - 11:58 #1
Jeg tror dit problem ligger i at du ikke bruger parametre, og at den ikke kan tolke din dt variabel.

Prøv at poste lidt mere af din kode, så er det nemmere at komme med konkrete foreslag.
Avatar billede softspot Forsker
26. maj 2009 - 12:35 #2
Prøv et eller andet i stil med dette:

using(OleDbConnection cn = new OleDbConnection(connStr))
{
  try
  {
    cn.Open();
    sql = "UPDATE serial_nr SET deliverdate=? Where serial=?";
    OleDbCommand cmd = new OleDbCommand(cn,sql);
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(new OleDbParameter("@dd", OleDbType.DateTime)).Value = dt;
    cmd.Parameters.Add(new OleDbParameter("@se", OleDbType.VarChar, 50)).Value = serial.Text;
    cmd.ExecuteNonQuery();
  }
  finally
  {
    if(cn.State != ConnectionType.Closed)
      cn.Close();
  ]
}

connStr indeholder din connectionstring og størrelserne på felterne er antagede.

OleDb er valgt til eksemplet fordi det er relativt generisk, men til en SQL Server bør der vælges SqlDb i stedet.

Koden er i øvrigt utestet, så der er muligvis behov for at justere lidt på parametertyperne og formatet, men den generelle idé er vist skitseret.
Avatar billede cocococo Praktikant
26. maj 2009 - 14:49 #3
ja fejlen ligger nok ved dt idet 

deliverdate='11-11-1111' virker men kan ikke se hvordan jeg får dt til at spytte noget ud :)
Avatar billede softspot Forsker
26. maj 2009 - 16:27 #4
Prøvede du med command-objekt udgaven?
Avatar billede wired Nybegynder
26. maj 2009 - 20:03 #5
Hvilket format(date-type) er felterne i din database?

De skal også være dateTime. Hvis de er det er det ikke det samme du levere til databasen.
I det ene tilfælde anvender du:
  dt  -  dvs. datetime
I det andet tilfælde anvender du:
  serial.Text.ToString() - dvs. String
Avatar billede aaberg Nybegynder
27. maj 2009 - 08:49 #6
cocococo: Hvis du viser din kode, er det nemmere at komme med et konkret forslag til, hvordan du fikser fejlen!
Avatar billede cocococo Praktikant
27. maj 2009 - 12:17 #7
kik du bare på koden.

dt = DateTime.Parse(datebox.Text.ToString());

SqlConnection myConnection1 = new SqlConnection();
myConnection1.ConnectionString = "Data  Catalog=she;Integrated Security=True";
myConnection1.Open();
string strSQL = "";
strSQL = "UPDATE serial_nr SET loan=1,deliverdate='"+ d + "' Where serial='" + serial.Text.ToString() + "'";

SqlCommand sel22 = new SqlCommand(strSQL, myConnection1);

sel22.ExecuteNonQuery();
myConnection1.Close();
Avatar billede softspot Forsker
27. maj 2009 - 12:34 #8
Prøv lige den version med parametre:

string connStr = "Data  Catalog=she;Integrated Security=True";
using(SqlConnection cn = new SqlConnection(connStr))
{
  try
  {
    cn.Open();
    sql = "UPDATE serial_nr SET deliverdate=? WHERE serial=?";
    SqlCommand cmd = new SqlCommand(cn,sql);
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.Add(new SqlParameter("@dd", SqlDbType.DateTime)).Value = dt;
    cmd.Parameters.Add(new SqlParameter("@se", SqlDbType.VarChar, 50)).Value = serial.Text;
    cmd.ExecuteNonQuery();
  }
  finally
  {
    if(cn.State != ConnectionType.Closed)
      cn.Close();
  }
}
Avatar billede aaberg Nybegynder
27. maj 2009 - 12:50 #9
Jeg vil bare lige tilføje, at når du bruger SqlConnection og SqlCommand, bruger man ikke spørgsmålstegn (?) for parametre, men: @parameterNavn.

Og en anden ting; når du bruger using rundt om din connection, er der ingen grund til også at bruge en try-finally. din connection bliver automatisk lukket når Dispose() bliver kaldt.

så prøv:

using(SqlConnection cn = new SqlConnection(connStr))
{
    sql = "UPDATE serial_nr SET deliverdate=@dd WHERE serial=@se";
    using (SqlCommand cmd = new SqlCommand(cn,sql))
    {
      cmd.CommandType = CommandType.Text;
      cmd.Parameters.AddWithValue("@dd", dt);
      cmd.Parameters.AddWithValue("@se", serial.Text);
      cn.Open();
      cmd.ExecuteNonQuery();
    }
}
Avatar billede cocococo Praktikant
27. maj 2009 - 14:40 #10
aaberg_cc din løsning ser ud til at virke
Avatar billede aaberg Nybegynder
27. maj 2009 - 14:55 #11
Så lægger jeg et svar :-)

Du må endelig bare sige til, hvis der er noget i koden du vil have forklaret bedre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester