Avatar billede tinaw25 Nybegynder
02. oktober 2013 - 18:25 Der er 1 kommentar og
1 løsning

Indsætte flere ting i databasen

Hejsa

Jeg sidder med et problem.

Jeg har et produkt møbel og når jeg opretter et produkt vil jeg godt vælge nogle farver i en checkboxlist og indsætte det i databasen. Så der evt bliver en blå, grøn og pink farve som høre til et møbel produkt. Jeg har leget lidt med scope_identity man kan ikke se hvad jeg gør forkert.

Møbel tabel ser sådan ud:

CREATE TABLE [dbo].[moebler] (
    [moebel_id]        INT          IDENTITY (1, 1) NOT NULL,
    [navn]            VARCHAR (200) NOT NULL,
    [pris]            DECIMAL (18)  NOT NULL,
    [varenr]          VARCHAR (50)  NOT NULL,
    [fk_designer_id]  INT          NOT NULL,
    [fk_kategorier_id] INT          NOT NULL,
    [design_aar]      VARCHAR (50)  NOT NULL,
    [beskrivelse]      TEXT          NOT NULL,
    PRIMARY KEY CLUSTERED ([moebel_id] ASC)

Min farve tabel ser sådan ud:
CREATE TABLE [dbo].[farve] (
    [farve_id]      INT          IDENTITY (1, 1) NOT NULL,
    [farver]        VARCHAR (50) NOT NULL,
    [fk_moebler_id] INT          NOT NULL,
    PRIMARY KEY CLUSTERED ([farve_id] ASC)
);

Selve koden i backend ser sådan her ud:
Her fylder jeg checkboxlisten:
adapt = new SqlDataAdapter(" SELECT * FROM farve", conn);
DataTable farve = new DataTable();
adapt.Fill(farve);

CheckBoxList1.DataSource = farve;
CheckBoxList1.DataValueField = "farve_id";
CheckBoxList1.DataTextField = "farver";
CheckBoxList1.DataBind();

Her prøver jeg at indsætte i databasen:

SqlConnection conn = new SqlConnection();
            conn.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO moebler (navn, pris, varenr, fk_designer_id, fk_kategorier_id, design_aar, beskrivelse) VALUES(@navn, @pris, @varenr, @designID, @kategoriID, @designaar, @indhold); SELECT SCOPE_IDENTITY()";

cmd.Parameters.Add("@navn", SqlDbType.VarChar).Value = TextBox_navn.Text;

cmd.Parameters.Add("@pris", SqlDbType.Decimal).Value = TextBox_pris.Text;

cmd.Parameters.Add("@varenr", SqlDbType.VarChar).Value = TextBox_pris.Text;

cmd.Parameters.Add("@designID", SqlDbType.Int).Value = DropDownList_designer.SelectedValue;

cmd.Parameters.Add("@kategoriID", SqlDbType.Int).Value = DropDownList_serie.SelectedValue;

cmd.Parameters.Add("@designaar", SqlDbType.VarChar).Value = Textbox_aar.Text;

cmd.Parameters.Add("@indhold", SqlDbType.Text).Value = Textbox_indhold.Text;


conn.Open();
object moebel_id = cmd.ExecuteScalar();
conn.Close();

           
                   
if (CheckBoxList1.SelectedIndex != -1)
{
                 
for (int i = 0; i < CheckBoxList1.Items.Count; i++)
      {
                       
          if (CheckBoxList1.Items[i].Selected)
          {
              cmd.CommandText = "INSERT INTO farve (farver, fk_moebler_id) VALUES (@farve, @fk_moebler_id)";
             
cmd.Parameters.Add("@filnavn", SqlDbType.VarChar).Value = CheckBoxList1.Items[i].Value;
             
cmd.Parameters.Add("@fk_moebler_id", SqlDbType.Int).Value = moebel_id;



}
                       
else if (CheckBoxList1.Items[i].Selected)
{
    cmd.CommandText = "INSERT INTO farve (farver, fk_moebler_id) VALUES (@farve, @fk_moebler_id)";
                       
cmd.Parameters.Add("@filnavn", SqlDbType.VarChar).Value = CheckBoxList1.Items[i].Value;
                           
cmd.Parameters.Add("@fk_moebler_id", SqlDbType.Int).Value = moebel_id;
                        }
                    }

                }
               
           


           


            Response.Redirect("produkter.aspx");
        }
Avatar billede Michael Johansen Nybegynder
03. oktober 2013 - 01:38 #1
Hej Tina,

Ser fint ud, bortset fra at du har glemt en cmd.ExecuteNonReader() på dine INSERT INTO farve, og du har iøvrigt også lavet en conn.Close() inden da...
Avatar billede Michael Johansen Nybegynder
03. oktober 2013 - 01:42 #2
Åhr det er også sent her.. ExecuteNonQuery() hedder den.
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