2016-12-12 1 views
1

Ich frage mich, ob es möglich ist, Werte zu bestimmten Datenbanktabellenzellen hinzuzufügen?mehrere Werte in eine Spalte in der SQL-Datenbank einfügen Tabelle

Angenommen, ich habe eine vorhandene Datenbanktabelle und füge einen neuen Wert zu einer bestimmten Spalte in einer Zeile hinzu. Wie würde ich die Spalte des neuen Werts hinzufügen, ohne die Zeilen der vorhandenen Spalten zu überschreiben?

Suppose I have these data for one user I want to insert new phone number to the phone column as it is shown in the image

ich in google gesucht und ich fand diese Methode

"INTO Benutzer INSERT (Telefon) VALUES ('99999975')"

aber es eine gibt Fehler

Kann nicht in Setzen Sie den Wert NULL in die Spalte 'cardID', die Spalte erlaubt keine Nullen. INSERT schlägt fehl.

Dies ist mein Code:

protected void btnInsert_Click(object sender, EventArgs e) 
{ 

    try 
    { 
     SqlConnection c = new SqlConnection(); 
     c.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"; 
     string s = "INSERT INTO Users (phone) VALUES('99999975')"; 

     SqlCommand sqlcom = new SqlCommand(s, c); 

     //sqlcom.Parameters.AddWithValue("@phone", TextNum.Text); 

     c.Open(); 
     SqlDataReader read = sqlcom.ExecuteReader(); 
     while (read.Read()) 
     { 


      Label3.Text += "name : " + read["name"].ToString() + "<br/>";//start with += 
      Label3.Text += "password: " + read["password"].ToString() + "<br/>"; 
      Label3.Text += "phone : " + read["phone"].ToString() + "<br/>"; 
      Label3.Text += "email : " + read["email"].ToString() + "<br/><br/>"; 
      Label3.Text += "cardID : " + read["cardID"].ToString() + "<br/><br/>"; 

     } 
     //sqlcom.ExecuteNonQuery(); 
     Label3.Text = "Insert successful"; 
     read.Close(); 
     //createTable(); 
     c.Close(); 
    } 
    catch (Exception ee) 
    { 
     Label3.Text = ee.Message; 
    } 
} 

Jede Hilfe würde geschätzt.

+3

INSERT fügt einen neuen Datensatz zu Ihrer Tabelle hinzu. Es aktualisiert einen vorhandenen Datensatz nicht. Und in jedem Fall, wenn Ihre Tabelle eine Spalte namens cardID hat, die so markiert ist, dass sie keine NULL-Werte akzeptiert, müssen Sie einen Wert für diese Spalte angeben. – Steve

+0

http://stackoverflow.com/questions/3653462/is-storing-a- delimited-list-in-a-database-column-real-that-bad/3653574 – e4c5

+0

Wahrscheinlich möchten Sie ein Update nicht einfügen – mybirthname

Antwort

2

Die Antwort des Servers ist ganz klar:

nicht den Wert NULL in Spalte 'CARDID' einfügen, Spalte nicht keine Nullen. INSERT schlägt fehl.

Sie haben die Abfrage in

string s = 
    @"INSERT INTO Users ( 
     phone, 
     cardId) -- you have to insert into this column 
     VALUES(
     '99999975', 
     '12346789') --todo: put actual CardId here"; 

...

// wrap IDisposable (SqlCommand) into using 
    using (SqlCommand sqlcom = new SqlCommand(s, c)) { 
    // Just Execute, you can't return cursor from INSERT 
    sqlcom.ExecuteNonQuery(); 
    ... 
    } 
0

Es scheint Tisch erfordert "CARDID" als nicht-null zu verwandeln, können Sie entweder ändern Sie die Tabelle um Nullwerte für dieses Feld zu akzeptieren, oder alternativ eine leere Zeichenfolge für "cardID" übergeben.

Sie sollten beurteilen, ob eine leere CARDID mit ok ist oder wenn zu Fehlern führen kann, weil im Moment ist es ein Pflichtfeld ist, ich denke, es ist so für einen Grund

Edit: , wenn Sie stattdessen wollen Wenn Sie eine vorhandene Telefonnummer ändern (und keine neue Zeile hinzufügen), sollten Sie eine UPDATE-Abfrage verwenden.

INSERT fügt eine neue Zeile

UPDATE Sie eine oder mehr Zeilen

0

Ihre Tabelle hat cardID als Primärschlüssel, und durch defintion lassen ändern, kann es nicht null sein. Wenn Sie in eine neue Zeile einfügen, müssen Sie für jede nicht nullfähige Spalte einen Wert festlegen. In Ihrem Fall ist die Spalte cardId eine davon, aber möglicherweise nicht die einzige.

Es gibt mehrere Möglichkeiten, die einzufügenden Daten einzufügen und diese Nachricht zu vermeiden. Ein Weg, um zu erreichen, was Sie für den Primärschlüssel wird durch die Ausführung Wert zu tun:

Insert into users (cardId, phone) values (1234,'99999');

Ein anderer Weg, setzen identity, den Primärschlüssel Tabelle Benutzer zu sein und als Ergebnis Es wird eine eigene automatisch generierte ID erhalten, und Sie müssen seinen Wert nicht festlegen.

CREATE TABLE Users 
(
    cardID int identity(1,1), 
    phone varchar(10) 
); 

insert into users(phone) values('99999967'); 
Verwandte Themen