Nefunkční připojení k MySql - zřejmě chybná syntaxe – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Nefunkční připojení k MySql - zřejmě chybná syntaxe – .NET – Fórum – Programujte.comNefunkční připojení k MySql - zřejmě chybná syntaxe – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
jenoc0
Newbie
4. 1. 2009   #1
-
0
-

Dobré odpoledne.

Mám tento kód:

using System;

using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using MySql.Data;
using MySql.Data.MySqlClient;

namespace school
{
public partial class _Default : System.Web.UI.Page
{
/*string pro navazani spojeni*/
private static string spojeni = @"Database=test;DataSource=127.0.0.1;UserId=root;Password=W1nd";

/*string pro vytvoreni tabulky*/
private static string vytvoreni_tabulky = @"CREATE TABLE Kl (
Id, INT, NOT NULL, PRIMARY KEY, AUTO_INCREMENT;
Nazev, Varchar(40), NOT NULL;
Autor, Varchar(40), NOT NULL);";

/*string pro jednotlive prikazy*/
private static string prikaz = "";

/*třída *Connection pro navázání spojení*/
MySqlConnection connect = new MySqlConnection(spojeni);
/*třída Command pro vykonávání jednotlivých příkazů*/
MySqlCommand cmd;

protected void Page_Load(object sender, EventArgs e)
{

}

/*vytvoreni "hlavicky" tabulky*/
protected void Button1_Click(object sender, EventArgs e)
{
Label5.Text = "";

try
{
connect.Open();//navážu spojení
/*konstruktoru třídy MySqlCommand předám string s požadovaným příkazem +
*instanci třídy MySqlConnection*/
cmd = new MySqlCommand(vytvoreni_tabulky, connect);
cmd.ExecuteNonQuery();//vykonání příkazu
}
catch (Exception ex)//vyjímka typu Exception
{
Label5.Text = ex.Message;//zobrazím chybový stav daný číslem v errno
}
finally//závěrečný blok == provede se vždy
{
/*ukončím aktivní spojení - fci Close(); lze použít i v případě, že spojení nenavážu,
*k chybě nedojde*/
connect.Close();
Label5.Text = "Příkaz byl úspěšně proveden";//informuju uživatele o správném vykování příkazu
}
}

/*vlozeni zaznamu do DB*/
protected void Button2_Click(object sender, EventArgs e)
{
try
{
/*sestavení SQL příkazu*/
prikaz = @"INSERT INTO Kl (`Nazev`, `Autor`) VALUES ('ppp', 'saman')";
connect.Open();//navázání spojení
cmd = new MySqlCommand(prikaz, connect);
cmd.ExecuteNonQuery();//vykonání příkazu
}
catch (Exception ex)
{
Label5.Text = ex.Message;
}
finally
{
connect.Close();
Label5.Text = "Příkaz byl úspěšně proveden";
}
}

/*čtení z DB*/
protected void Button3_Click(object sender, EventArgs e)
{
prikaz = @"SELECT Autor, Nazev FROM Kl";

try
{
cmd = new MySqlCommand(prikaz, connect);
connect.Open();
MySqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
Label6.Text += reader[0].ToString() + ", " + reader[1].ToString() + ", " + reader[2].ToString();
}
}
catch (Exception ex)
{
Label5.Text = ex.Message;
}
finally
{
connect.Close();
Label5.Text = "Příkaz byl úspěšně proveden";
}
}
}
}


A mám s ním několik problémů. 1)Ve složce .\mysql\data\test se sice vytvoří požadovaná databáze Kl, ale jen jednou, pokud znova kliknu na button 1, tak se tato již vytvořená databáze nepřepíše - nyslel jsem, že k tomu aby se nepřepsala, bych musel mít místo CREATE TABLE Kl toto CREATE TABLE IF NOT EXISTS Kl - nebo to funguje jinak?

2)Nefunguje zápis do tabulky. IMHO bude chyba někde v syntaxi, ale dle toho, co je zde > http://dev.mysql.com/doc/refman/5.0/en/insert.html to mám dobře. Proč to tedy nefunguje?

3)Nejsem si jistý tím výpisem (čtením z DB), nemůžu zjistit, jestli funguje, ptž když do table nic nezapíšu, tak logicky nemůžu i nic číst.

Žádné vyjímky nenastávají, žádné chybové hlášky. Prosím o pomoc, už se s tím trápím celé odpoledne, vyzkoušel jsem všelijaké zápisy, ale prostě nic z toho mi nefunguje. Předem děkuji za pomoc.

Nahlásit jako SPAM
IP: 88.103.71.–
Reklama
Reklama
Japo0
Návštěvník
4. 1. 2009   #2
-
0
-

Máš špatně příkaz CREATE TABLE, má to být takto:

private static string vytvoreni_tabulky = @"CREATE TABLE Kl (


Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT;

Nazev Varchar(40) NOT NULL;

Autor Varchar(40) NOT NULL);";


Insert nemůže fungovat, pokud není tabulka. Stejně tak select. Zkus si taky sehnat nějaký nástroj na prohlížení databáze (např. phpMyAdmin).

Nahlásit jako SPAM
IP: 90.176.243.–
Japo0
Návštěvník
4. 1. 2009   #3
-
0
-

Mimochodem kód:

try { /*neco*/ }

catch (Exception ex)
{
Label5.Text = ex.Message;
}
finally
{
connect.Close();
Label5.Text = "Příkaz byl úspěšně proveden";
}


ti vždy vypíše do Label5 text "Příkaz byl úspěšně proveden", i když nastane chyba (vypsání chyby se přepíše, protože blok finally se provádí, ať se už objevila výjimka nebo ne).

Nahlásit jako SPAM
IP: 90.176.243.–
jenoc0
Newbie
4. 1. 2009   #4
-
0
-

2Japo: Nj máš samozřejmě pravdu, to co jsem tam měl já je blbost.

Tabulka jde nyní vytvořit, ale opět jen jednou, když to zkusím znova, tak místo přepsání dostanu výsledek: Can't create table '.\knihy\knihy.frm' (errno: 121). Co jsem zjistil, tak to je kvůli tomu, že jakoby chci vytvářet další tabulku se stejným jménem...ale žádnou tabulku v té složce nemám, tak nevím, jestli se názvy ukládají ještě někam(?).

Nahlásit jako SPAM
IP: 88.103.71.–
Japo0
Návštěvník
4. 1. 2009   #5
-
0
-

Tak zkus CREATE TABLE IF NOT EXISTS Kl. Sice jsem to nikdy nezkoušel, ale jestli to pomůže, zjistíš na netu za pár minut.

Mimochodem, vytvářet tabulky za běhu aplikace se nedoporučuje. Nejlepší je všechny tabulky vytvořit předem (pořádně si to rozmyslet, nakreslit) a uživatel do nich pak bude jen zapisovat, mazat z nich... Nenapadá mě rozumné využití vytváření tabulek po stisku tlačítka.

Tabulky můžeš vytvářet třeba pomocí toho phpMyAdmina, jestli tam půjde načíst databázi ze souboru, který si vybereš (nikdy jsem to nezkoušel).

Že nenajdeš souboru tabulky je v pořádku (moc bych se tomu divil), jelikož celá databáze (a všechny její tabulky) bývají uloženy v jednom souboru. Ačkoliv pro MySQL si tím nejsem tak úplně jist.

Nahlásit jako SPAM
IP: 90.176.243.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 49 hostů

Podobná vlákna

Chybná syntaxe — založil bohetik

Připojení k MySQL — založil G0rk1ll

C Mysql Připojení — založil TheDejv

Pripojeni na mysql error — založil bortak

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý