Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Probleme mit SQL

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.12.2006, 18:14 Uhr
Eroli



Hallo,

warum meckert er beim erstellen einer table die so aussieht?


Code:
        SqlCommand.CommandText = "Create Table GBook(" +
                                 "id INTEGER UNSIGNED PRIMARY KEY AUTO_INCREMENT," +
                                 "Name VARCHAR(255) NOT NULL," +
                                 "Mail VARCHAR(255) NOT NULL," +
                                 ");";




Ich versteh nich was er daran nich mag?!?



Viele Grüße,
Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2006, 20:20 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Welches DBMS?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2006, 20:34 Uhr
Eroli



Die Seite wird hier gehostet:
www.vwdhosting.net


Ist ein SQL Server 2005


Beantwortet das deine Frage??


Hmm, hab die Tabelle jetzt mit EMS SQL Manager Lite angelegt, das ist leider nur 30 Tage verwendbar, kennt einer von euch kostenlose Alternativen???


Und warum kann ich jetzt keine Datensätze reinschreiben?


Code:
        SqlCommand.CommandText = "INSERT INTO GBook(id, Name, Mail, Message) VALUES (1,"+NameTextBox.Text+","+EMailTextBox.Text+","+NachrichtTextBox.Text+")";



Er meint dann immer, dass ich keine Erlaubnis hätte Columns zu erstellen, aber das will ich doch auch gar nicht!! Ich will doch bloß die Daten da reinschreiben?!

Dieser Post wurde am 09.12.2006 um 20:58 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.12.2006, 22:50 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Als erstes solltest Du die Entwicklung lokal durchführen und dann nur die .mfd auf den Server laden.
Hier das Erstellungsscript für die Konsole:
(SQL Server kennt z.B. Autoincrement nicht)

Code:
CREATE TABLE GBook (
    Id INTEGER IDENTITY(1,1) NOT NULL,
    Name VARCHAR(40),
    Mail VARCHAR(100),
    PRIMARY KEY (Id)
)
GO



On the fly (und das hat viele Nachteile) muss normalerweise noch der DB Name mit angegeben werden:


Code:
CREATE TABLE [database_name] .[GBook] (
    Id INTEGER IDENTITY(1,1) NOT NULL,
    Name VARCHAR(40),
    Mail VARCHAR(100),
    PRIMARY KEY (Id)
)



Zitat von Eroli:

Und warum kann ich jetzt keine Datensätze reinschreiben?


Kennt Dein Connectionobjekt die Datenbank?
Außerdem sind die "" falsch. Also:

C++:
SqlCommand.CommandText = "INSERT INTO GBook(id, Name, Mail, Message) VALUES (1,NameTextBox.Text,EMailTextBox.Text,NachrichtTextBox.Text)";


Bei dem Script Oben wird durch IDENTITY um 1 incrementiert.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 09.12.2006 um 22:55 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.12.2006, 23:47 Uhr
Eroli



Danke für die Quelltexte.

Habe die Datenbank jetzt, so wie du es dort oben gemacht hast, erstellt.

Allerdings noch mit der Column Message VARCHAR(500)!

Mein Command muss so aussehen:


Code:
        SqlCommand.CommandText = "INSERT INTO GBook(id, Name, Mail, Message) VALUES (1,"+NameTextBox.Text+","+EMailTextBox.Text+","+NachrichtTextBox.Text+")";



Damit nicht NameTextBox.Text in das Column geschrieben wird, sondern der Inhalt dieser Textbox. Oder bin ich jetzt ganz doof?
Danach folgt:

Code:
        SqlConnection.Open();
        SqlCommand.ExecuteNonQuery();
        SqlConnection.Close();


EDIT:
Ach her gott, ich vergaß die ' '

So sollte es richtig sein

Code:
        SqlCommand.CommandText = "INSERT INTO GBook(id, Name, Mail, Message) VALUES (null,'"+NameTextBox.Text+"','"+EMailTextBox.Text+"','"+NachrichtTextBox.Text+"')";




Nur wie kann ich jetzt die id behandeln, ich kann da keine 1 oder 2 oder so oder auch kein null hinschreiben!
Wie geht das?

EDIT:
Ok, man muss die id einfach weglassen. Dankeschön Uwe. Die nächsten Fragen kommen sicherlich ;-)


Greetz,
Eroli




Noch ein Edit:
Wenn ich die Beiträge jetzt laden soll, dann würde ich das gerne in einer For-Schleife machen.
Wie finde ich heraus, wieviel Beiträge es schon gibt, also wo die id am höchsten ist?


Eroli

Dieser Post wurde am 10.12.2006 um 00:17 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.12.2006, 00:47 Uhr
Eroli



Hallo,

nochmal, weil es jetzt so unübersichtlich geworden ist.

Ich möchte die Beiträge, die ich davor gespeichert habe auslesen.
Wie mache ich das am besten?

so, vielleicht??


Code:
for (int i = 1; i== 10; i++)
{
        SqlCommand.CommandText = "SELECT id,Name,Mail,Message FROM GBook WHERE id="+i.ToString();
GBookTextBox.Text = GBookTextBox.Text + "\n" + SqlCommand.ExecuteNonQuery();
}



so könnte man die ersten 10 Beiträge auselesen???? oder?

Und wie krieg ich raus wieviele Beiträge es insgesamt gibt??


Viele Grüße,
Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.12.2006, 12:57 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Viele Wege führen nach Rom.
Am einfachsten (so scheint es zunächst) ist die Sache mit mit einem Datenadapter (da)
DataSet (ds) und einer DataView (dv).
da über den Designer an Deine Tabelle binden. ds über den da generieren.
dv.Table erhält dann die Tabelle ds.GBook zugewiesen.

Gut: wenn du jetzt z.B. ein DataGrid hast, bekommt deren Eigenschaft DataSource das dv zugewiesen.
Mit:

C++:
da.Fill(ds,"GBook");
DataBind();


Sollten dann Deine Datensätze im DataGrid erscheinen. Das mit dem VS-Eigenem Designer hat aber so seine Eigenheiten.
Eine weitere Möglichkeit besteht z.B. die Tabelle über ein DataReader Objekt einzulesen.
Was jetzt folgt, hab ich, da ich zu faul war die Tabelle am Sql-Server anzulegen, über OleDb Objekte gemacht.

C++:
/// <summary>
/// Abbild der Tabelle GBOOK
/// </summary>
private struct GBook
{
    public long Id;
    public string Name;
    public string Mail;
    public string Message;
};
        
private void btnReadBook_Click(object sender, System.EventArgs e)
{
    OleDbCommand command = new OleDbCommand();
    // SQL String zum auslesen der Anzahl der Datensätze
    string strCount = "SELECT COUNT (*) FROM GBOOK";
    command.CommandText = strCount;
    command.Connection = conn;
    int iDataSetcount = 0;
    try
    {
        if (conn.State == ConnectionState.Closed)
            conn.Open();
        // Anzahl DS auslesen
        iDataSetcount = (int)command.ExecuteScalar();
    }
    catch (OleDbException ex)
    {
        MessageBox.Show(ex.Message);
        conn.Close();
        return;
    }
    string strSQL = "SELECT ID, LASTNAME, MAIL, MESSAGE FROM GBOOK";
    command.CommandText = strSQL;
    OleDbDataReader dr = null;
    // Arraygröße setzen
    GBook[] gBook = new GBook[iDataSetcount];
    // Zählvariable
    int iCounter =0;
    try
    {
        dr = command.ExecuteReader();
        while (dr.Read())
        {
            // Index = ColumnIndex
            gBook[iCounter].Id = dr.GetInt32(0);
            gBook[iCounter].Name = dr.GetString(1);
            gBook[iCounter].Mail = dr.GetString(2);
            gBook[iCounter].Message = dr.GetString(3);
            iCounter++;
        }
    }
    catch (OleDbException ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        dr.Close();
        conn.Close();
    }
}


Das mit der Structure Sollte nur zur Demo dienen. Ich persönlich bevorzuge bei DB oder Webanwendungen die Tabellen als Klassen einschließlich ihrer Beziehungen nachzubauen.
Über die entsprechenden Property's kann ich dann auch eine Datenbindung realisieren.
Ich denke, dass ich so flexibler bin.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 10.12.2006 um 13:00 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.12.2006, 16:44 Uhr
Eroli



Hallo,

danke Uwe, das klappt super, allerdings eine Frage.

Wenn ich versuche das DataGridView in einen IFrame zu verschieben geht das nicht, allerdings kann ich beim Ding selber nicht einstellen, das dort Scrollbars kommen sollen, oder doch?
Und wenn mein GB mal mehrere Einträge hat, wird die Seite deswegen unermesslich lang. Wie kann man dieses Prob beheben?


Viele Grüße,
Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: