Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Erneutes Problem 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
23.12.2006, 23:10 Uhr
Eroli



Hallo,
ich habe eine Datenbank SQL Server 2005. Dort habe ich eine Tabelle "AuctionsTable" in der es zur Zeit 6 Einträge gibt. Das wird noch wachse. Deswegen versuche ich erstmal die Anzahl der Einträge zu ermittel(iCounter). Dann sollen davon 3 Zufallseinträge rausgesucht werden die aber immer unterschiedlich sein sollen. Das klappt auch, glaube ich ;-)
Aber wenn er dann die Werte rauslesen soll, meint er, da wäre nix(Leseversuch fehlgeschlagen, weil keine Werte vorhanden).


Code:
    protected void Button1_Click(object sender, EventArgs e)
    {
        System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
        System.Data.SqlClient.SqlConnection SqlConnection = new System.Data.SqlClient.SqlConnection();
        SqlConnection.ConnectionString = "data source='sql1.vwdhosting.net,1437';User ID='MyUsername';Password=MyPw;database='MyDbName';";
        SqlCommand.Connection = SqlConnection;
        SqlCommand.CommandText = "SELECT [Id] FROM [AuctionsTable];";
        SqlConnection.Open();
        System.Data.SqlClient.SqlDataReader DataReader = SqlCommand.ExecuteReader();
        int iCounter = 0;
        while (DataReader.Read())
        {
            iCounter++;
        }
        DataReader.Close();
        System.Random Rnd = new Random();
        int[] verifier = new int[3] { -1, -1, -1, };
        for (int i = 0; i != 3; i++)
        {
            int index = Rnd.Next(iCounter);

            while(verifier[0] == index || verifier[1] == index || verifier[2] == index)
            {
                index = Rnd.Next(iCounter);
                verifier[i] = index;
            }
            SqlCommand.CommandText = "SELECT [Categorie],[Title],[Price],[Appointment] FROM [AuctionsTable] WHERE Id=@IdentificationNumber";
            SqlCommand.Parameters.AddWithValue("@IdentificationNumber", index);
            DataReader = SqlCommand.ExecuteReader();

            int test = (int)DataReader.GetInt32(0);   [HIER MECKERT ER]
            string categorie = (string)DataReader.GetSqlString(1);
            int price = (int)DataReader.GetSqlInt32(5);
            DateTime appointment = (DateTime)DataReader.GetDateTime(6);
            verifier[i] = index;
        }
        DataReader.Close();
        SqlConnection.Close();
        DataReader.Dispose();
        SqlConnection.Dispose();
    }



Was hab ich schonwieder falsch gemacht?!


Greetz,
Eroli

EDIT: Ahja, er meckert in der markierten Zeile. Wahrscheinlich aber auch in dreien danach..

Dieser Post wurde am 23.12.2006 um 23:13 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.12.2006, 11:07 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Zwei Sachen die mir auffallen:
1.

C++:
DataReader = SqlCommand.ExecuteReader();


wird zwar ausgeführt, aber es wird nicht gelesen:

C++:
while (DataReader.Read())
{
    // ..........
}


2.

C++:
SqlCommand.CommandText = "SELECT [Categorie],[Title],[Price],[Appointment] FROM [AuctionsTable] WHERE Id=@IdentificationNumber";
// ...
int test = (int)DataReader.GetInt32(0);
string categorie = (string)DataReader.GetSqlString(1);


In Deinem SQL-Statement steht an Pos 0 "Categorie" also ein String und kein Integer.
Also:
pos(0) -> Categorie
pos(1) -> Title
u.s.w.

Frohes Fest.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 24.12.2006 um 11:08 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.12.2006, 11:18 Uhr
Eroli



Ah klar, da hab ich mich wohl irgendwie vertan mit den Positions. Danke für den Denkanstoß!

Und zu deiner ersten Sache, es wird doch gelesen, nur nicht in einer While, sondern in einer For-Schleife oder nicht?


Ebenfalls ein frohes und besinnliches Fest,

Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.12.2006, 12:01 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Ja, hab das ja nur überflogen. Aber die Read() Methode muß auf alle Fälle aufgerufen werden.
Also:

C++:
for(...)
{
    ...
    DataReader = SqlCommand.ExecuteReader();
    DataReader.Read();
    ....
}


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

Bis dann...
Uwe

Dieser Post wurde am 24.12.2006 um 12:09 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.12.2006, 12:13 Uhr
Eroli



Achso, mich hat das nur verwirrt, weil da stand ja, dass das ein Bool sei
und keine Methode....

Danke Uwe, werde es so machen.

Frohes und besinnliches Fest!


Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.12.2006, 12:21 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Richtiger ist eigentlich

C++:
for(...)
{
    ...
    DataReader = SqlCommand.ExecuteReader();
    if (DataReader.Read())
    {
       ....
       DataReader.Close();
    }
}


--
"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
006
24.12.2006, 12:27 Uhr
Eroli



Ok danke. Werde es so probieren, wenn nicht, gibt es hier nochmal Post
 
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: