Avatar billede damon Nybegynder
22. september 2006 - 12:47 Der er 9 kommentarer

Fejl i min Insert til SQL database (ADO)

Jeg bruger følgende kode eksempel til at insette en række i min database

        SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString);
        conn.Open();
        string insertString = @"insert into Profile values ('" + firstnameTextbox.Text + "','"
                                                                              + lastnameTextbox.Text + "','"
                                                                              + addressTextbox.Text + "','"
                                                                              + phoneTextbox.Text + "','"
                                                                              + mobileTextbox.Text + "','"
                                                                              + zipcodeTextbox.Text + "','"
                                                                              + cityTextbox.Text + "','"
                                                                              + newusernameTextBox.Text + "')";
      SqlCommand cmd = new SqlCommand(insertString, conn);

    // 2. Call ExecuteNonQuery to send command
    cmd.ExecuteNonQuery();

men får en fejl når jeg når til cmd.executeNonQuery(); med fejlen

String or binary data would be truncated.
The statement has been terminated.

nogen der kan hjælpe mig med hvad det kan være ?
Avatar billede ellebaek Nybegynder
22. september 2006 - 12:51 #1
der kan være et par ting der er i vejen...

har du flere felter i din tabel end dem du sætter ind..?
altså hvis du fx. har et felt der hedder id, så skal du definere hvilke felter du vil indsætte...

string insertString = @"insert into Profile(felt1, felt2, osv) values ('" +

eller også kan det være typefejl..
hvis zipcode er af typen tal i din database, så skal du fjerne '-erne omkring værdien i din sql...
Avatar billede softspot Forsker
22. september 2006 - 12:59 #2
Jeg tror det er fordi du prøver at putte mere data i et felt end du har afsat i databasen. f.eks. at du putter en streng der er 200 tegn lang i et felt der kun er varchar(150)...
Avatar billede softspot Forsker
22. september 2006 - 13:01 #3
I øvrigt vil jeg da anbefale at du benytter parametre i stedet for at sammensætte SQL-strengen som du gør. Din SQL bliver mere sårbar overfor SQL-injection, når du sammensætter den.
Avatar billede damon Nybegynder
22. september 2006 - 13:06 #4
Havde defineret et feldt med en forkert type, Ellevaek læg et svar og tak for hjælpen
Avatar billede softspot Forsker
22. september 2006 - 13:09 #5
Eksempel:

using(SqlConnection conn = new SqlConnection(SqlDataSource1.ConnectionString)) {
  conn.Open();
  string sql = @"insert into Profile (firstname,lastname,address,phone) "
            + "values (@firstname,@lastname,@address,@phone)";

  SqlCommand cmd = new SqlCommand(insertString, conn);
  cmd.Parameters.Add(new SqlParameter("@firstname",firstnameTextbox.Text);
  cmd.Parameters.Add(new SqlParameter("@lastname",lastnameTextbox.Text);
  cmd.Parameters.Add(new SqlParameter("@address",addressTextbox.Text);
  cmd.Parameters.Add(new SqlParameter("@phone",phoneTextbox.Text);

  // 2. Call ExecuteNonQuery to send command
  cmd.ExecuteNonQuery();
}

Du kan nok selv se mønsteret i hvordan man benytter parametre, så du kan selv tilføje de sidste.

using-tingen er benyttet for at sikre en lukning af databaseforbindelsen og frigørelse af de resurser som forbindelsen bruger. Det er alternativet til selv at skulle lukke og slukke (mere elegant efter min mening).

Brugen af parametre er i dette eksempel helt simpelt, og du bør af performancemæssige hensyn specificere så meget du kan om de enkelte parametre, dvs. type, længde osv., således din applikation ikke behøver at spørge databasen om disse ting.
Avatar billede ellebaek Nybegynder
22. september 2006 - 13:12 #6
Jeg smider et svar her :-)
men tror nu også du skal give lidt til softspot. han kommer med nogle gode pointer...
Avatar billede softspot Forsker
22. september 2006 - 13:22 #7
Jeg kan i det mindste lige rette en syntaksfejl i det kode jeg viste:

  cmd.Parameters.Add(new SqlParameter("@firstname",firstnameTextbox.Text));
  cmd.Parameters.Add(new SqlParameter("@lastname",lastnameTextbox.Text));
  cmd.Parameters.Add(new SqlParameter("@address",addressTextbox.Text));
  cmd.Parameters.Add(new SqlParameter("@phone",phoneTextbox.Text));

Ang. point, så bare giv dem til ellebaek - det er fint med mig :)
Avatar billede damon Nybegynder
22. september 2006 - 13:24 #8
Tak Softspot :)
Avatar billede softspot Forsker
22. september 2006 - 13:39 #9
Velbekomme :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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