Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » MS SQL und der Update Befehl

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 < [ 2 ]
000
11.01.2007, 21:44 Uhr
Eroli



Hallo zusammen,

wollte mir gerade den UPDATE Befehl einer bestehenden Row aneignen, aber irgendwie wird da rein gar nix geupdatet. Das ganze befindet sich in einer ASP.NET Seite die beim drücken eines Buttons folgenden Quelltext ausführt:

Code:
        System.Data.SqlClient.SqlCommand SqlCommand = new System.Data.SqlClient.SqlCommand();
        System.Data.SqlClient.SqlConnection SqlConnection = new System.Data.SqlClient.SqlConnection();
        SqlConnection.ConnectionString = (string)System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlCommand.Connection = SqlConnection;
        SqlCommand.CommandText = "UPDATE UsersTable SET FirstStart=@FirstStart,Commercial=@Commercial,Name=@Name,MailAddress=@MailAddress,Address=@Address,Address2=@Address2,Location=@Location,PostCode=@PostCode,Country=@Country,PhoneNumber=@PhoneNumber,PhoneNumber2=@PhoneNumber2,Sex=@Sex WHERE User=@User;";
        SqlCommand.Parameters.AddWithValue("@User", Context.User.Identity.Name);
        SqlCommand.Parameters.AddWithValue("@FirstStart", 0);
        if (AccountTypeDropDownList.SelectedIndex == 0)
            SqlCommand.Parameters.AddWithValue("@Commercial", 0);
        else if (AccountTypeDropDownList.SelectedIndex == 1)
            SqlCommand.Parameters.AddWithValue("@Commercial", 1);
        SqlCommand.Parameters.AddWithValue("@Name", NameTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@MailAddress", EmailTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@Address", AddressTextBox1.Text);
        SqlCommand.Parameters.AddWithValue("@Address2", AddressTextBox2.Text);
        SqlCommand.Parameters.AddWithValue("@Location", LocationTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@PostCode", Convert.ToInt32(PostCodeTextBox.Text));
        SqlCommand.Parameters.AddWithValue("@Country", CountryTextBox.Text);
        SqlCommand.Parameters.AddWithValue("@PhoneNumber", PhoneNumberTextBox1.Text);
        SqlCommand.Parameters.AddWithValue("@PhoneNumber2", PhoneNumberTextBox2.Text);
        switch (SexDropDownList.SelectedIndex)
        {
            case 0:
                SqlCommand.Parameters.AddWithValue("@Sex", -1);
                break;
                
            case 1:
                SqlCommand.Parameters.AddWithValue("@Sex", 0);
                break;
                
            case 2:
                SqlCommand.Parameters.AddWithValue("@Sex", 1);
                break;
        }
        SqlConnection.Open();
        SqlCommand.ExecuteNonQuery();
        SqlConnection.Close();
        SqlConnection.Dispose();



Wenn ich danach mit dem MS SQL Server Management Dingen Express die Tabelle anschaue, hat sich nichts geändert, obwohl ich passende Werte eingegeben habe.

Jemand eine Idee?

Viele Grüße,
Eroli
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.01.2007, 19:41 Uhr
Eroli



Also ich glaube es liegt daran, dass dieser Befehl

Code:
SqlCommand.CommandText = "UPDATE UsersTable SET FirstStart=@FirstStart,Commercial=@Commercial,Name=@Name,
MailAddress=@MailAddress,Address=@Address,Address2=@Address2,
Location=@Location,PostCode=@PostCode,Country=@Country,
PhoneNumber=@PhoneNumber,PhoneNumber2=@PhoneNumber2,
Sex=@Sex WHERE User=@User;";



richtig ist, nur die WHERE BEdingung nicht erfüllt ist.
User ist eine Spalte in der Tabelle, aber es ist NICHT die Identitässpalte. Macht das irgendwelche Probleme?
Sollte ich doch lieber die ID mit angeben als WHERE Bedingung?

Dieser Post wurde am 12.01.2007 um 19:41 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.01.2007, 00:19 Uhr
Eroli



Ok, die Klammern um die Spalten haben gefehlt, mein Fehler. Sorry...

Ok, nächstes Problem [...]WHERE User='Eroli' zum Beispiel klappt nicht, weil Eroli keine Indentitätsspalte ist. Wenn ich das ganze mit der ID mache geht es, weil das die Identitätsspalte ist.

Wie kann ich das Problem lösen??

Dieser Post wurde am 13.01.2007 um 00:39 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.01.2007, 16:13 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

Zitat von Eroli:
[...]WHERE User='Eroli' zum Beispiel klappt nicht, weil Eroli keine Indentitätsspalte ist....

Das halte ich für ein Gerücht! Wenn das Update nicht ausgeführt wird ist etwas anderes faul.
Was passiert, ist das alle User "Eroli" überschrieben werden. Dann kannst Du das Feld User gleich als PK nehmen. Wie überprüfst Du ob das Update ausgeführt wurde? Im Datenbank-Explorer mußt Du auf "aktualisieren" klicken.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 13.01.2007 um 16:13 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.01.2007, 17:10 Uhr
Eroli




Zitat:

Das halte ich für ein Gerücht!


Ich wollte es ja auch nicht glauben. Habe es zu Erst ohne Bedingung(WHERE) gemacht und es hat geklappt. Allerdings dann für alle ROWs und das will ich nicht. Wenn ich es mit WHERE mache, dann wird gar nix mehr gemacht, obwohl das entsprechende Column ganz ganz sicher den String "Eroli" enthält.
Dann hab ich es mit der ID (Identitätsspalte) gemacht und es gint wieder. Allerdings möchte ich es über den Usernamen machen. Wie schaffe ich das?

Zitat:

Was passiert, ist das alle User "Eroli" überschrieben werden. Dann kannst Du das Feld User gleich als PK nehmen.

Jeder Username ist unique! Aber wie kann ich ein Column vom Typ Text(BTW: Ist Text == String?) denn bitte als PK definieren. Mein MS SQL Management Studio Express will das nicht machen....irgendwie....

Zitat:

Wie überprüfst Du ob das Update ausgeführt wurde? Im Datenbank-Explorer mußt Du auf "aktualisieren" klicken.


Habe ich so gemacht...

EDIT: Beweisfoto: www.mitglied.lycos.de/eroli3/GehtNicht.jpg
Links Oben:
Id ohne PK - geht bei User trotzdem nicht

Links Unten:
Id mit PK - geht bei User trotzdem nicht

Rechts Mitte:
dasselbe wie Links oben, vielleicht etwas ersichtlicher...

Dieser Post wurde am 13.01.2007 um 17:24 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.01.2007, 22:56 Uhr
Eroli



Ok, es könnte an noch etwas anderm liegen.

Wenn ich im Management Studio folgende Query ausführen will, krieg ich folgenden Fehler

Code:
SELECT * FROM UsersTable WHERE [User]='Eroli'



Zitat:

Meldung 402, Ebene 16, Status 1, Zeile 1
Die Datentypen text und varchar sind im equal to-Operator inkompatibel.



Wie muss der Befehl dann lauten????

Die User-Column ist vom Typ Text!


Also nochmal.....es will einfach nicht klappen!!!!!

Code:
UPDATE UsersTable SET [FirstStart]=0,[Commercial]=0,[Name]='Mein Name',[MailAddress]='Mail@gmx.net',[Address]='Str',[Address2]='nix',[Location]='Stadt',
[PostCode]=012345,[Country]='Deutschland',[PhoneNumber]='012345678',
[PhoneNumber2]='12345678',[Sex]=1 WHERE User='Eroli'


klappt NICHT, aber

Code:
UPDATE UsersTable SET [FirstStart]=0,[Commercial]=0,[Name]='Mein Name',[MailAddress]='Mail@gmx.net',[Address]='Str',[Address2]='nix',[Location]='Stadt',
[PostCode]=012345,[Country]='Deutschland',[PhoneNumber]='012345678',
[PhoneNumber2]='12345678',[Sex]=1 WHERE Id=30


klappt!!!

WIIIEEESOOOO?????????????

Ich bin hier echt am verzweifeln...

EDIT: Ok, so musste es sein:

Code:
UPDATE UsersTable SET [FirstStart]=0,[Commercial]=0,[Name]='Mein Name',[MailAddress]='Mail@gmx.net',[Address]='Str',[Address2]='nix',[Location]='Stadt',
[PostCode]=012345,[Country]='Deutschland',[PhoneNumber]='012345678',
[PhoneNumber2]='12345678',[Sex]=1 WHERE [User]='Eroli'



MAN WAR DAS NE SCHWERE GEBURT!!!!!






Kann mir dann hier vielleicht noch einer sagen, wie ich die Spalte User Unique hinkriege??

Dieser Post wurde am 13.01.2007 um 23:31 Uhr von Eroli editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.01.2007, 09:28 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ein Primary Key kann nicht vom DatenTyp "text" oder "image" sein. Wandle das in varchar(n) um, dann kannst Du einen PK anlegen.
--
"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
007
14.01.2007, 11:49 Uhr
Eroli



achso, ja ich weiß jetzt ja wie es geht.

Ich denke, ich werde alle meine char(50) usw in varchar oder nvarchar umwandeln. Macht dies Sinn?
Denn bei einem Char(15) sieht mein String nachher so aus
"Username........" (. sind Leerzeichen) und das ist nicht so toll. Mit einem Varchar hätte ich das Problem doch nicht, oder?

Wie dekliniere ich varchar, einfach nur "varchar" oder "varchar()" oder wie? Wieviel Stellen kann dieser Datentyp maximal haben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.01.2007, 12:14 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo
Am besten ist, wenn Du varchar(n) nutzt
IMO sind 50 Zeichen standard, varchar(50). Wenn du mehr zeichen brauchst, einfach den Wert in der Klammer oder bei Spalteneigenschaft (Länge) überschreiben.
http://msdn2.microsoft.com/en-us/library/aa258271(SQL.80).aspx
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 14.01.2007 um 12:14 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.01.2007, 12:22 Uhr
Eroli



Aber eine Spalte mit variabler Länge gibt es nicht?

Weil ich kann meinen Usern ja schlecht vorschreiben, dass jeder Username 47 Stellen haben muss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: