[ bigguy @ 24.10.2008. 11:03 ] @
Imam problem sa unosom podataka u bazu. Naime, bazu sam napravio na istom racunaru na kom je i aplikacija uz pomoc SQL Servera 2005. U okviru te baze napravio sam jednu tabelu tblOsnovniPodaci, a potom sam napravio dataset za tu bazu i tabelu. U kodu programa imam sledece klase: clsSqlconnection, clsFunctions i clsProcedures, i imam dve forme frmMAIN i frmUpisPacijenta kod kojih prva poziva drugu. Program kopletno radi i prilikom izvrsavanja neprijavljuje nikakvu gresku ali kada pogledam tabelu preko Show data table tamo nema niceg upisanog. Gde je greska???

Klase izgledaju ovako:

public class clsSqlConnection
{
public SqlConnection conn;
private string strconn;

public clsSqlConnection() // Konekcija
{
strconn = "server = localhost;Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Laboratorija.mdf;Integrated Security=True;User Instance=True";
conn = new SqlConnection(strconn);
}

protected void ExecuteSQL(string sSQL)
{
SqlCommand cmd = new SqlCommand(sSQL,conn);
try
{
conn.Close();
conn.Open();
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}

public class clsFunctions
{
// Pozivanje instaliranog programa u sistemu
public static bool shell(string strshell)
{
System.Diagnostics.Process.Start(strshell);
return true;
}

// Funkcija za slučaj da je TextBox prazan
public void isTextBoxEpty(TextBox txt, string sLabel)
{
MessageBox.Show(sLabel + " je nepopunjeno. Molim Vas, poroverite polje za unos.", "Greška", MessageBoxButtons.OK, MessageBoxIcon.Information);
txt.Focus();
}
}

public class clsProcedures : ISLab.clsSqlConnection
{
public clsProcedures()
{}

public void AddOsnovnihPodataka(string ime, string prezime, string jmbg, int godina, bool pol_M, bool pol_Z)
{
string sSQL = "INSERT INTO tblOsnovniPodaci(Ime, Prezime, JMBG, GodinaRodjenja, Pol_M, Pol_Z) VALUES ('" + ime + "', '" + prezime + "', '" + jmbg + "', '" + godina + "', '" + pol_M + "', '" + pol_Z + "')";
ExecuteSQL(sSQL);
}
}

Forme izgedaju ovako:

public partial class frmMAIN : Form
{
public frmMAIN()
{
InitializeComponent();
}

clsFunctions clsFunc = new clsFunctions();
clsProcedures clsProd = new clsProcedures();

private void button1_Click(object sender, EventArgs e)
{
frmUpisPacijenta.UPIS_STANJE = true;
frmUpisPacijenta frmUpis = new frmUpisPacijenta();
frmUpis.Text = "Unesite novog pacijenta.";
frmUpis.ShowDialog();
}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}

public partial class frmUpisPacijenta : Form
{
public frmUpisPacijenta()
{
InitializeComponent();
}

// Objekti klase
clsFunctions clsFunc = new clsFunctions();
clsProcedures clsProd = new clsProcedures();

// Bool-ove promenjive
public static bool UPIS_STANJE;

private void button1_Click(object sender, EventArgs e)
{

if (txtIme.Text == "" || txtPrezime.Text == "")
{
clsFunc.isTextBoxEpty(txtIme, "Ime ili prezime");
}
else
{
clsProd.AddOsnovnihPodataka(txtIme.Text, txtPrezime.Text, txtJMBG.Text, int.Parse(txtGodinaRodjenja.Text), rbntM.Checked, rbntZ.Checked);
MessageBox.Show("Uspe šno ste uneli pacijenta.","Uspešan unos",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.Close();
}
}

private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}


POMAGAJTE!!!!!
[ Igor Gajic @ 24.10.2008. 15:06 ] @
Code:

string sSQL = "INSERT INTO tblOsnovniPodaci(Ime, Prezime, JMBG, GodinaRodjenja, Pol_M, Pol_Z) VALUES ('" + ime + "', '" + prezime + "', '" + jmbg + "', '" + godina + "', '" + pol_M + "', '" + pol_Z + "')";


Pretpostavljam da je problem ovde.


Trebalo bi da bude:

Code:


string sSQL = "INSERT INTO tblOsnovniPodaci(Ime, Prezime, JMBG, GodinaRodjenja, Pol_M, Pol_Z) VALUES ('" + ime + "', '" + prezime + "', '" + jmbg + "', '" + godina.ToString() + "', '" + (pol_M ? "1" : "0") + "', '" + (pol_Z ? "1" : "0") + "')";


[ bigguy @ 24.10.2008. 20:54 ] @
Ni to nije pomoglo :( Jednostavno nece, pa nece :(
Debug i dalje glatko prodje kroz kod ali podaci se i dalje ne unose u tabelu. Imali jos neko neki predlog?
Ocajnicki mi je potrebna pomoc
[ deerbeer @ 24.10.2008. 22:46 ] @
A sto ne stavis catch blok i tako uhvatis poruku o gresci :
Code:

try
{
conn.Close();
conn.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException exc) 
{
MessageBox.Show(exc.Message); 
// pa vidi sta ti vraca 
}
[ bigguy @ 25.10.2008. 14:33 ] @
Nista ne vraca :( Kazem ja, sve je ok ali se podaci i dalje ne upisuju u tabeli.
Hajde da jos dodam, mada nevidim razloga da bi to trebalo da predstavlja problem, bazu sam napravio desnim klikom na solution explorer, add item SQL database.mdf, a potom sam u okviru database explorera, a u okviru konstruisane baze, napravio tabelu, da bi na kraju odabirom opcije add new data source napravio dataset u kojem sam odabrao napravljenu tabelu u okviru formirane baze.

Mislim da sam sad sve napisao, a ovo sad pocinje i uzasno da iritira.
Imali ko jos koju ideju? Please :(
[ Beer-drinker @ 26.10.2008. 12:28 ] @
Nisam proucavao kod jer mislim da i nije greska u kodu, tacnije, mislim da uopste nema greske! Problem ti verovatno stvara nacin na koji Visual Studio IDE funkcionise, kada su baze podataka u pitanju. I ja sam pre par meseci bio u slicnom problemu i to me je toliko izludelo da sam bio na ivici da dignem ruke od svega i vratim se na clipper.

Naime: napravio sam bazu iz IDE okruzenja, popunio je sa par podataka i napisao program. Kada unosim, menjam,brisem podatke sve deluje OK. Kada posle toga pogledam bazu, u njoj su samo oni originalni podaci nastali prilikom kreiranja. Nijedna knjiga koju sam konsultovao (a netu hvala, imam ih stotinak :) ne pominje takav problem.Osim jedne, meni od tada najdraze (OReilly-Head First C#). Naime, to je POTPUNO OCEKIVANO I NORMALNO ponasanje IDE-a koje, svaki put kada se izvrsi BUILD (a izvrsava ga svaki put kada ponovo startujes program iz okruzenja) zajedno sa novom kopijom EXE fajla u bin/debug direktorijum prekopira i IZVORNU bazu podataka (u mom slucaju sa par podataka, u tvom praznu). Instaliraj program na drugi racunar ili ga startuj iz Windowsa koliko god hoces puta, podaci su OK. Prvi build vratice originalne podatke. Pokusavao sam da shvatim razlog zasto to ovako funkcionise, smislio sam par afirmativnih i gomilu psovki, ali sta je tu je, tako je. Cudi me samo da to niko nije po literaturi objasnio (mozda se podrazumeva i mozda to oduvek tako funkcionise, ali ja sam samo srednjevekovni clipperash koji luta po tehnologijama XXI stoleca.
[ bigguy @ 27.10.2008. 10:49 ] @
Beer-drinker bio si u neku ruku u pravu. Sve sto si napisao je potpuno tacno, ali danas sam dobio i dopunu tvog predloga. Rec je o tome da se u Properties-u datebase Copy to Output Directory postavi na Copy if never. Na taj nacin ovaj problem se moze prevazici.
Hvala svima na posvecenom vremenu i nadam se da ce ovo tema pomoci onima koji ce se tek susresti sa ovim problemom.