Forum » Programiranje » SQL problem
SQL problem
GummyBear ::
Lp! Imam problem s shranjevanjem in spreminjanjem podatkov v podatkovni bazi (MDF datoteka). V C# imam napisan stavek:
SqlConnection sqlConnection = new SqlConnection(conStr);
sqlConnection.Open();
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = "INSERT INTO Test (niz) VALUES ('abc')";
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
Kot vidite je stavek čisto enostaven (gre za eno tabelo z enim atributom), ampak v bazo mi ničesar ne shrani in tudi nobene napake ne izpiše. Torej, ne delata INSERT INTO in UPDATE. Kaj je tukaj problem? Uporabljam pa Visual Studio 2005.
SqlConnection sqlConnection = new SqlConnection(conStr);
sqlConnection.Open();
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = "INSERT INTO Test (niz) VALUES ('abc')";
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
Kot vidite je stavek čisto enostaven (gre za eno tabelo z enim atributom), ampak v bazo mi ničesar ne shrani in tudi nobene napake ne izpiše. Torej, ne delata INSERT INTO in UPDATE. Kaj je tukaj problem? Uporabljam pa Visual Studio 2005.
GupeM ::
Nisem prepričan in niti ne poznam te knjižnice... ampak, ima sqlConnection mogoče metodo commit ali kaj podobnega?
GummyBear ::
sqlConnection nima commit ali kaj podobnega.
Prej sem napisal malce narobe - uporabljam Visual C# Express Edition 2005. In isti problem se je pojavil tudi na Visual C# Express Edition 2010 (razvijam pa Windows Desktop Application). Ker se problem pojavlja na dveh različnih verzijah, sumim, da gre za kakšno nastavitev v razvojnem okolju.
Prej sem napisal malce narobe - uporabljam Visual C# Express Edition 2005. In isti problem se je pojavil tudi na Visual C# Express Edition 2010 (razvijam pa Windows Desktop Application). Ker se problem pojavlja na dveh različnih verzijah, sumim, da gre za kakšno nastavitev v razvojnem okolju.
phyro ::
učasih je tako pri bazah v datotekah, če maš kak zunanji editor s katerim odpreš bazo moraš računat da on lahko prebere fajl in prikaže kar ima... če pol ti narediš spremembo ga mogoče moraš ponovno odpret da spet prebere (ni nujno da bo kar sam refreshal in ponovno prebral novo stanje baze iz datoteke)
Zgodovina sprememb…
- spremenil: phyro ()
Izbeglica ::
Kaj pa če posebej deklariraš objekt SqlCommand in mu potem prirediš sqlconnection.CreateCommand()?
SqlConnection sqlConnection = new SqlConnection(conStr);
SqlCommand sqlCommand = new SqlCommand();
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = "INSERT INTO Test (niz) VALUES ('abc')";
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
Sicer pa, je 100% niz tudi ime stolpca v tabeli? No, čeprav če ne bi bil, bi ti že zajamralo...
SqlConnection sqlConnection = new SqlConnection(conStr);
SqlCommand sqlCommand = new SqlCommand();
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = "INSERT INTO Test (niz) VALUES ('abc')";
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
sqlConnection.Close();
Sicer pa, je 100% niz tudi ime stolpca v tabeli? No, čeprav če ne bi bil, bi ti že zajamralo...
GummyBear ::
Tudi createCommand sem poskusil in tudi ne deluje. Ko skušam z vgrajenim urejevalnikom prikazati vsebino tabele, se izpiše NULL. SQL stavek pa je 100% pravilno sestavljen - sicer bi drugače dobil error. Poskusil sem tudi programsko prebrati tabelo (SELECT stavek) in tudi pokaže, da je prazna tabela.
Očitno je nekaj narobe s programsko opremo/bazo in sedaj nimam časa za razmišljanje. Odločili sem se za drugačen pristop - podatke bom shranil v navadno datoteko. Če pa slučajno kdo ve, kaj bi bilo narobe, lepo prosim za odgovor, da bom vedel za drugič.
Očitno je nekaj narobe s programsko opremo/bazo in sedaj nimam časa za razmišljanje. Odločili sem se za drugačen pristop - podatke bom shranil v navadno datoteko. Če pa slučajno kdo ve, kaj bi bilo narobe, lepo prosim za odgovor, da bom vedel za drugič.
nuclear ::
Sumim connectionString, poveš kakšen connectionString uporabljaš?
Glede tvoje kode, prosim te, če passaš vrednosti kot parametre in ne kot stringe, ker si ranljiv na sql napade.
Tako:
Celi primer:
Podal sem še try catch zanko, poglej če ti napiše kako napako, čeprav stavim, da si narobe connectionString napisal. Si probal v management studiu direkt SQL stavke napisati? Če tam dela, potem je napačen connectionString.
Glede tvoje kode, prosim te, če passaš vrednosti kot parametre in ne kot stringe, ker si ranljiv na sql napade.
Tako:
sqlCommand.Parameters.AddWithValue("@Niz", 'abc');
Celi primer:
using ( SqlConnection sqlConnection = new SqlConnection(conStr) ) { using ( SqlCommand sqlCommand = sqlConnection.CreateCommand() ) { try { sqlCommand.CommandText = "INSERT INTO Test (niz) " + "VALUES (@Niz)"; sqlCommand.Parameters.AddWithValue("@Niz", 'abc'); sqlConnection.Open(); sqlCommand.ExecuteNonQuery(); } catch(Exception ex) { throw new Exception(ex.ToString(), ex); } finally { sqlConnection.Close(); } } }
Podal sem še try catch zanko, poglej če ti napiše kako napako, čeprav stavim, da si narobe connectionString napisal. Si probal v management studiu direkt SQL stavke napisati? Če tam dela, potem je napačen connectionString.
Asus G14 2023 - Ryzen 7940HS - 32GB DDR5 - GeForce RTX 4080 - 990 PRO 4TB
GummyBear ::
Tudi sqlCommand.Parameters.AddWithValue sem probal in je isto. Try-catch ni nujen, a sem ga vseeno dal in ni ne napake, niti ničesar ne shrani.
connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=\"|DataDirectory|\\Database1.mdf\";Integrated Security=True;User Instance=True";
Verjetno je pravilen, saj drugače ne bi mogel brati iz baze.
connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=\"|DataDirectory|\\Database1.mdf\";Integrated Security=True;User Instance=True";
Verjetno je pravilen, saj drugače ne bi mogel brati iz baze.
krneki0001 ::
En primerček;
using System.Data.OleDb; private OleDbConnection myconn; public Form1() { InitializeComponent(); myconn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Podatki\tabela.mdb");
private void btnSave_Click(object sender, EventArgs e)** { OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = @"insert into Personal (P_name, P_add,P_Phone)VALUES('" + txtName.Text + "','" +txtAddress.Text + "','" + txtPhone.Text + "')"; cmd.Connection = con; con.Open(); cmd.ExecuteNonQuery(); System.Windows.Forms.MessageBox.Show("Recrod Succefully Created"); con.Close(); txtName.Text = ""; txtAddress.Text = ""; txtPhone.Text = ""; }
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster
Zgodovina sprememb…
- spremenilo: krneki0001 ()
cleanac ::
1. Preveri State vrednost na SqlConnection po klicu Open().
2. ExecuteNonQuery() ti mora v tvojem primeru vrniti 1, ce je bil zapis uspesen.
3. Pri AttachDbFilename narekovaji niso potrebni.
4. Pri AttachDbFilename odstrani \\ - mislim, da je to ze vkkljuceno v path-u.
Skoraj sem preprican, da je nekaj narobe s povezavo do baze, kar bi try...catch Moral javiti.
2. ExecuteNonQuery() ti mora v tvojem primeru vrniti 1, ce je bil zapis uspesen.
3. Pri AttachDbFilename narekovaji niso potrebni.
4. Pri AttachDbFilename odstrani \\ - mislim, da je to ze vkkljuceno v path-u.
Skoraj sem preprican, da je nekaj narobe s povezavo do baze, kar bi try...catch Moral javiti.
TESKAn ::
Zapiši v bazo z urejevalnikom podatek in potem preberi, da vidiš, če ti branje 100% dela.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.
ki jo je prav v ta namen nosil s seboj.
MrStein ::
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!
Zgodovina sprememb…
- spremenil: MrStein ()
darkolord ::
Najbolj pogost vzrok za to je, da imaš nastavljeno, da ti bazo prepiše vsakič, ko kompajlaš program. Preveri lastnost "Copy to Output Folder" v VSju na fajlu od baze...
Zgodovina sprememb…
- spremenilo: darkolord ()
darkkk ::
Isto sem jaz pomislil.
Za poskus, naredi neko branje ven iz .mdb, skompajlaj pa podtakni uni file v projekt in probaj najprej ven prebrati nekaj.
Načeloma se v skompilan projekt prepiše .mdf datoteka iz vs projekta.
Za poskus, naredi neko branje ven iz .mdb, skompajlaj pa podtakni uni file v projekt in probaj najprej ven prebrati nekaj.
Načeloma se v skompilan projekt prepiše .mdf datoteka iz vs projekta.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | C# INSERT statment ne vpise podatkovOddelek: Programiranje | 1212 (1086) | darkolord |
» | Napaka pri povezavi z bazo - c#Oddelek: Programiranje | 1013 (877) | Mitja Bonča |
» | Pomoč pri programu!Oddelek: Programiranje | 1435 (1293) | Mitja Bonča |
» | [C#] Dostop do objekta iz različnih formOddelek: Programiranje | 2174 (1887) | Kekec |
» | [C#] Query in codeOddelek: Programiranje | 1829 (1573) | iggy1 |