» »

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.

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.

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...

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č.

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:
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.
Corsair 750D - VI Hero - i5 4670k - Corsair Dominator 32GB - 1080Ti - EVO 500GB
- Sabrent 1TB nVME - Corsair AX860i - Ducky Shine 3 Brown

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.

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

Zgodovina sprememb…

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.

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.

MrStein ::

Commit je avtomatski?

Mogoče to pomaga http://social.msdn.microsoft.com/Forums...
Motiti se je človeško.
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.

win64 ::

Tako iz glave: pravice?
Kaj vrača ExecuteNonquery?


Vredno ogleda ...

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

C# INSERT statment ne vpise podatkov

Oddelek: Programiranje
111037 (911) darkolord
»

Napaka pri povezavi z bazo - c#

Oddelek: Programiranje
7943 (807) Mitja Bonča
»

Pomoč pri programu!

Oddelek: Programiranje
81339 (1197) Mitja Bonča
»

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

Oddelek: Programiranje
182095 (1808) Kekec
»

[C#] Query in code

Oddelek: Programiranje
261727 (1471) iggy1

Več podobnih tem