» »

C# INSERT statment ne vpise podatkov

C# INSERT statment ne vpise podatkov

b00mer ::

Pozdravljeni
Naj prvo povem, da sem nov v c# Windows Forms.
Imam aplikacijo za racunanje obveznic. Podatke preberem iz tabele, izracune vpisem v gridview in jih potem iz grdiviewa poberem.
Ko bi jih rad vpisal v drugo tabelo se ne zgodi 0.
Poskusil sem vnesti tudi preko parametrov, vendar brez uspeha.

int amorplanid = 0;
            int idn = 0;
            DateTime datum;
            double interest = 0;
            double principal = 0;
            double payment = 0;
            double newprincipal = 0;

            string nizz = "";
            string[] niz= new string[7];
                for (int x = 0; x < dataGridView1.Rows.Count-1; x++)
                {
                    for (int j = 0; j < dataGridView1.Rows[x].Cells.Count; j++)
                    {
                        
                        nizz += dataGridView1.Rows[x].Cells[j].Value.ToString()+"."; 
                    }
                    niz = nizz.Split('.');

                    amorplanid = System.Convert.ToInt32(niz[0]);
                    idn = System.Convert.ToInt32(niz[1]);
                   // datum = System.Convert.ToDateTime(niz[2]);
                    datum = DateTime.Now;
                    interest = System.Convert.ToDouble(niz[3]);
                    principal = System.Convert.ToDouble(niz[4]);
                    payment = System.Convert.ToDouble(niz[5]);
                    newprincipal = System.Convert.ToDouble(niz[6]);

                   String insert = @"INSERT INTO AmortPlanCoupT(ID, AmortPlanID, CoupDate, Interest, Principal, Payxment, NewPrincipal) VALUES (" + idn + "," + amorplanid + "," + datum + "," + (float)interest + "," + (float)principal + "," + (float)payment + "," + (float)newprincipal + ")";
                      SqlConnection myconn = new SqlConnection(conn);
                     // String MyString = @"INSERT INTO Employee(ID, FirstName, LastName) VALUES(2, 'G', 'M')";
                      try
                      {
                          myconn.Open();
                          SqlCommand cmd = new SqlCommand(insert, myconn);
                          cmd.ExecuteNonQuery();
                          myconn.Close();
                      }
                      catch (Exception ex)
                      {
                          MessageBox.Show(ex.ToString());
                      }


V ta namen sem naredil Console app, kjer testiram simple vnos, ne dela..
 SqlConnection MyConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\App_Data\Database1.mdf;Integrated Security=True;User Instance=True");

                      try
                      {
                         MyConnection.Open();

                            String MyString = @"INSERT INTO test(id, leto) VALUES(2, 2)";
                            SqlCommand MyCmd = new SqlCommand(MyString, MyConnection);

                            MyCmd.ExecuteNonQuery();
                            MyConnection.Close();

                      }
                      catch (Exception e)
                      {
                          Console.WriteLine(e.ToString());
                      } 
        }

Nekje sem zasledil, da connection string ni pravilen oz. nej bi insert "mesal" podatkovno bazo..
Kako oz kje se spremeni conn string v Data Source=.\SQLEXPRESS;Database=Database1;Integrated Security=True ?

Hvala lp

KernelPanic ::

Daj probaj sql stavek pognati direktno na serverju, da ni kaksnih syntax errors. Jaz bi to prvo preveril.

b00mer ::

Zivjo

Sem potestiral in dela .

KernelPanic ::

A to mogoce delas za analitica d.o.o.? (Sorry za offtopic)

jamiroq ::

mogoče en nasvetič glede sql query stringov v c#:

namesto konkatenacije
String insert = @"INSERT INTO AmortPlanCoupT(ID, AmortPlanID, CoupDate, Interest, Principal, Payxment, NewPrincipal) VALUES (" + idn + "," + amorplanid + "," + datum + "," + (float)interest + "," + (float)principal + "," + (float)payment + "," + (float)newprincipal + ")";

delaj raje takole
SqlConnection conn = new SqlConnection("asdf, fdsa");
SqlCommand cmd = new SqlCommand("INSERT INTO AmortPlanCoupT(ID, AmortPlanID, CoupDate, Interest, Principal, Payxment, NewPrincipal) VALUES (@idn, @amorplanid, @datum, @interest, @principal, @payment, @newprincipal)", conn);
//namesto .text lahko izberes tudi CommandType.StoredProcedure; namesto sql inserta zgoraj le vpises ime stored procedure
cmd.CommandType = CommandType.Text;
//spodaj so tvoje vrednosti, ki si vstavljal v sql insert s konkatenacijo stringov
cmd.Parameters.AddWithValue("@idn", idn);
cmd.Parameters.AddWithValue("@amorplanid", amorplanid);
cmd.Parameters.AddWithValue("@datum", datum);
cmd.Parameters.AddWithValue("@interest", (float)interest);
cmd.Parameters.AddWithValue("@principal", (float)principal);
cmd.Parameters.AddWithValue("@payment", (float)payment);
cmd.Parameters.AddWithValue("@newprincipal", (float)newprincipal);


se mi zdi, da je tako vse skupaj malo bolj pregledno...

carota ::

In če greš z debuggerjem skozi, bi moral videti kje je problem.

b00mer ::

Zdravo

jamiroq hvala za nasvet. Sem naredi tako kot si predlagal, vendar ne dobim nobenega zapisa v bazo.
Debuggerja ne obvladam, ampak se mi zdi da je ok. Ne vem kje tocno se vidi dejanski zapis v bazo ?
Za test sem v watch dodal @idn in @datum...obe imata vrednost .

Se screena

carota ::

V spodnji sliki prirediš vrednosti a potem ne izvedeš ExecuteNonQuery().

b00mer ::

Sem popravil, vendar brez uspeha...
Enostavno mi je ze mal zmanjkalo idej..V query builderju lahko lepo insertam, programsko je pa....:\

Looooooka ::

Popravil kako in kje.Plus vklopi si exceptionev.Ce se nic ne zapise potem definitivno ne gre cez brez exceptiona.
Razen ce mas magicno 2 instanci sql serverja z 2 bazama in kasneje preverjas napacno :)

elrado ::

Daj izvedi kaki MyCmd.commit(), v exceptionu pa MyCmd.rollback (če obstajata).

darkolord ::

Ko izvedeš ExecuteNonQuery(), ti metoda vrne število vnesenih vrstic. Koliko ti vrne?

Preveri še, če nimaš nastavljeno, da ti datoteko z bazo ob vsakem kompajlu prepiše - to je precej pogosta napaka.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL problem

Oddelek: Programiranje
141188 (806) win64
»

[Visual C#] TableAdapter

Oddelek: Programiranje
6792 (668) detroit
»

Statistika dijakov, pomoc

Oddelek: Programiranje
211307 (791) Mitja Bonča
»

[C#] Dostop do objekta iz različnih form

Oddelek: Programiranje
181832 (1545) Kekec
»

[C#] Query in code

Oddelek: Programiranje
261423 (1167) iggy1

Več podobnih tem