2016-11-13 6 views
0

Ich versuche, die folgenden zwei Tabellen miteinander zu verbinden:Anschließen von zwei SQL Server-Tabellen

CREATE TABLE [dbo].[Groups] 
(
    [Group_Id] INT IDENTITY (1, 1) NOT NULL, 
    [Group_Name] NVARCHAR (50) NULL, 
    [Group_Desc] NVARCHAR (50) NULL, 

    PRIMARY KEY CLUSTERED ([Group_Id] ASC) 
); 

CREATE TABLE [dbo].[Events] 
(
    [Event_Id] INT IDENTITY (1, 1) NOT NULL, 
    [Event_Group_Id] INT null, 
    [Event_Type] NVARCHAR (50) NULL, 
    [Event_Title] NVARCHAR (50) NULL, 

    PRIMARY KEY CLUSTERED ([Event_Id] ASC), 

    CONSTRAINT fk_event_group 
     FOREIGN KEY (Event_Group_Id) REFERENCES Groups (Group_Id) 
); 

Erste Frage: habe ich richtig die Tabellen erstellt?

Ich konnte die Events mit dem folgenden Code hinzufügen, aber ich konnte nicht erfolgreich die PK von Groups als FK in Events verbinden.

Hat jemand irgendwelche Vorschläge?

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BallinoraDBConnectionString1"].ConnectionString); 
     conn.Open(); 
     string findGroupOfEvent = "SELECT Group_Id FROM Groups WHERE Group_Name ='" + DropDownListEventGroup.SelectedItem.ToString() + "'"; 
     int groupId = Convert.ToInt32(findGroupOfEvent); 
     string insertQuery = "INSERT INTO Events (Event_Group_Id, Event_Type, Event_Title) VALUES (@GroupEventID, @Type, @Title)"; 
     SqlCommand com = new SqlCommand(insertQuery, conn); 
     com.Parameters.AddWithValue("@GroupEventID", groupId); 
     com.Parameters.AddWithValue("@Type", DropDownListEventType.SelectedItem.ToString()); 
     com.Parameters.AddWithValue("@Title", TextBoxET.Text); 
     com.ExecuteNonQuery(); 
     Response.Redirect("ViewEvents.aspx"); 
     Response.Write("Registration is successful"); 
     conn.Close(); 

UI

Adding Dropdown Items

+3

'aber ich konnte nicht erfolgreich die PK von Gruppen als FK in Events verbinden. <= Was meinst du damit? Außerdem sollten Sie Ihre SqlConnections in "using" -Blöcken verpacken und jedes Mal, wenn Sie mit der Datenbank interagieren möchten, eine neue Instanz erstellen (haben Sie keine zentrale SqlConnection, die Sie wiederverwenden!). Siehe auch [Best Practices - Ausführen von SQL-Anweisungen] (http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements). – Igor

+0

Wenn ich der Ereignistabelle eine neue Zeile hinzufüge, habe ich ein Dropdown-Menü, das denselben Text enthält, der sich in [Gruppenname] von [Gruppen] befindet. Ich möchte in der Lage sein, die Group_ID der gleichen Zeile wie die [Group_Name] im DropDown-Menü ausgewählt zu erhalten, und diesen Wert [Event_Group_ID] in der Tabelle [Events] zuweisen. – user2911539

+0

Sie haben nichts UI erwähnt, bis jetzt zeigt diese Frage nur Sql DDL und ADO.NET. Dieser Teilcode sieht für mich alle gut aus mit einer Notiz, die Sie in Ihrem Parameter '@ GroupEventID'' 1' fest programmiert haben, was vielleicht Ihre Absicht ist oder auch nicht. Wenn Sie Hilfe mit Dropdown-Werten benötigen, sollten Sie den entsprechenden Code dafür anzeigen. – Igor

Antwort

0

Ändern Sie den value in Ihrem Designer Screenshot https://i.stack.imgur.com/c0Ryz.png-1 und dann 2 usw., dass die IDs entspricht Sie in Ihrer Datenbanktabelle verwendet. Aus diesem Grund schlägt Ihr Code fehl, da Sie einen String-Namen nicht in eine Ganzzahl konvertieren können. Der Wert ist die eindeutige ID (int), der Name ist der Anzeigetext.

Eine viel bessere und wartungsfreundlichere Option wäre das dynamische Generieren der Listenelemente aus den Datenbankwerten, wenn das Formular/Steuerelement geladen wird. Es gibt viele schon gefragt, Fragen gute Antworten auf diese wie Databind ASP.NET List of ListItem to DropDownList issue

+0

Das ist gelungen, das Problem zu lösen. Vielen Dank für die Hilfe. – user2911539

+0

@ user2911539 - Froh, dass es für Sie funktioniert hat. Überlegen Sie bitte, eine Antwort zu akzeptieren (siehe [So akzeptieren Sie SO-Antworten] (http://meta.stackexchange.com/a/5235)). – Igor

-1

Können Sie unten Details liefern, scheint SQL fein und Datenbank auch gut aussehen:

  1. Sie bekommen Wert von DropDownListEventGroup von UI und Abfrage der globalen Detailtabelle, um Ihnen Daten zu geben.

  2. Haben Sie Daten in der Gruppentabelle?

Prost Sudeep

+0

Hallo, ich habe einen Screenshot der Daten in der Groups-Tabelle hinzugefügt – user2911539

+0

Kann veröffentlichte Daten von der Benutzeroberfläche zum Server zeigen, was kommt –

+0

Wenn ich versuche, ein neues Ereignis zu übermitteln, erhalte ich die folgende Fehlermeldung: Fehler: System.FormatException: Die Eingabezeichenfolge hatte kein richtiges Format. bei System.Number.StringToNumber (String str, NumberStyles-Optionen, NumberBuffer & Zahl, NumberFormatInfo-Info, Boolean parseDecimal) bei System.Number.ParseInt32 (String s, NumberStyles-Stil, NumberFormatInfo-Info) bei System.Convert.ToInt32 (String-Wert) unter Admin .btnAddEvent_Click (Objektabsender, EventArgs e) in c: \ Benutzer \ 11342 \ OneDrive \ Dokumente \ 4th Year \ FYP \ BallinoraWaterfallCommunity \ Admin.aspx.cs: Zeile 88 – user2911539

0

und Text zu GroupID Beschreibung aus der Datenbank während Liste Gebäude Dropdown, und Sie können direkt mit der ID abfrage in unter SQL auf Gruppen-ID anstelle des Gruppennamen:

string findGroupOfEvent = "SELECT Group_Id FROM Groups WHERE Group_ID ='" + DropDownListEventGroup.SelectedItem.ToString() + "'"