2015-11-19 2 views
-3

Я работаю над сайтом моего членства, подключенным к базе данных. Все таблицы уже созданы в базе данных. Однако у меня проблема с обработкой внешних ключей. Я на самом деле не знаю, как это сделать ...Обработка внешних ключей в asp.net

Я использую VS 2012 для веб-

Это страница регистрации, что член заполняет, когда они хотят, чтобы вступить в клуб. В таблице участников у меня есть несколько внешних ключей, которые нужно обрабатывать: addressID, memberID, EmergencyContactEmail и clubID.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
public partial class Default2 : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(IsPostBack) 
     { 
      SqlConnection regConn = new SqlConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString); 
      regConn.Open(); 
      string check = "select count(*) from member where memberEmail ='" + emailTB.Text + "'"; 
      SqlCommand cmd = new SqlCommand(check, regConn); 

      int i = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
      if (i == 1) 
      { 
       Response.Write("User already exists"); 
      } 
       regConn.Close(); 
     } 
    } 
    protected void SubmitButton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      Guid addressGuid = Guid.NewGuid(); 
      Guid medicalGuid = Guid.NewGuid(); 
      Guid membershipGuid = Guid.NewGuid(); 

      SqlConnection regConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Data Source=student5;Initial Catalog=FeelGoodDatabase;Persist Security Info=True;User ID=sa;Password=*******"].ConnectionString); 
      regConn.Open(); 
      string insertMember = "insert into member (memberEmail, firstName, surname, dateOfBirth, password, contactNumber) values(@email, @firstName, @surname, @dob, @password, @phone)"; 
      string insertAddress = "insert into address (addressID, lineOne, lineTwo, town, county) values (@addressID, @lineOne, @lineTwo, @town, @county)"; 
      string insertEmergency = "insert into emergencyContact (emergencyContactEmail, emergencyContactName, emergencyContactSurname, emergencyContactNumber) values (@emEmail, @emName, @emSurname, @emPhone)"; 
      string insertMedical = "insert into medicalInfo(medicalInfoID, physicalHealthInfo) values (@medicalInfoID, @healthInfo)"; 
      string insertMembership = "insert into membership(membershipID, membershipType, paymentOption, membershipPrice) values (@memID, @memType, @payOption, @amount)"; 
      string selectedMembership = this.RadioButtonList1.SelectedItem.Text; 
      string selectedPayOption = this.RadioButtonList2.SelectedItem.Text; 

      SqlCommand cmd = new SqlCommand(insertMember, regConn); 
      SqlCommand cmdAddress = new SqlCommand(insertAddress, regConn); 
      SqlCommand cmdEmergency = new SqlCommand(insertEmergency, regConn); 
      SqlCommand cmdMedical = new SqlCommand(insertMedical, regConn); 
      SqlCommand cmdMembership = new SqlCommand(insertMembership, regConn); 

      cmdAddress.Parameters.AddWithValue("@addressID", addressGuid.ToString()); 
      cmdMedical.Parameters.AddWithValue("@medicalInfoID", medicalGuid.ToString()); 
      cmdMembership.Parameters.AddWithValue("@memID", membershipGuid.ToString()); 

      cmd.Parameters.AddWithValue("@email", emailTB.Text); 
      cmd.Parameters.AddWithValue("@firstName", firstNameTB.Text); 
      cmd.Parameters.AddWithValue("@surname", surnameTB.Text); 
      cmd.Parameters.AddWithValue("@dob", dobTB.Text); 
      cmd.Parameters.AddWithValue("@password", passwordTB.Text); 
      cmd.Parameters.AddWithValue("@phone", phoneTB.Text); 
      cmdAddress.Parameters.AddWithValue("@lineOne", lineOneTB.Text); 
      cmdAddress.Parameters.AddWithValue("@lineTwo", lineTwoTB.Text); 
      cmdAddress.Parameters.AddWithValue("@town", townTB.Text); 
      cmdAddress.Parameters.AddWithValue("@county", emailTB.Text); 
      cmdEmergency.Parameters.AddWithValue("@emEmail", emEmailTB.Text); 
      cmdEmergency.Parameters.AddWithValue("@emName", emnameTB.Text); 
      cmdEmergency.Parameters.AddWithValue("@emSurname", emSurnameTB.Text); 
      cmdEmergency.Parameters.AddWithValue("@emPhone", emPhoneTB.Text); 
      cmdMedical.Parameters.AddWithValue("@healthInfo", medicalTB.Text); 
      cmdMembership.Parameters.AddWithValue("@memType", selectedMembership); 
      cmdMembership.Parameters.AddWithValue("@paymentOption", selectedPayOption); 
      cmdMembership.Parameters.AddWithValue("@amount", amountTB.Text); 
      cmd.ExecuteNonQuery(); 
      cmdAddress.ExecuteNonQuery(); 
      cmdEmergency.ExecuteNonQuery(); 
      cmdMedical.ExecuteNonQuery(); 
      cmdMembership.ExecuteNonQuery(); 

      Response.Redirect("MemberPage.aspx"); 
      regConn.Close(); 
     } 
     catch (Exception) 
     { 
      Response.Write("Sign up not successful"); 
     } 
    } 
} 

Кроме того, когда я запускаю этот код, я получаю сообщение об ошибке с указанием: Ссылка на объект не указывает на экземпляр объекта, который происходит на этой линии:

SqlConnection regConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Data Source=student5;Initial Catalog=FeelGoodDatabase;Persist Security Info=True;User ID=sa;Password=********"].ConnectionString); 

Есть ли у вас какие-либо идеи как это исправить? Спасибо.

+0

Это по существу неопределенной переменной. Забудьте все эти материалы базы данных и сосредоточьтесь на этом. –

+1

ConfigurationManager.ConnectionStrings - это массив, который, вероятно, имеет простой ключ, который относится к элементам раздела ConnectionString вашего web.config. Помещение всей строки подключения в виде индекса массива, вероятно, не является хорошей идеей :) – thsorens

+0

См. Пример в [Свойстве ConfigurationManager.ConnectionStrings] (https://msdn.microsoft.com/en-us/library/system.configuration .configurationmanager.connectionstrings% 28v = vs.110% 29.aspx) для использования. –

ответ

0

Вы должны использовать строку строки подключения вместо использования цельной строки соединения в ConfigurationManager.ConnectionStrings. Asp.Net не смог найти ключ в web.config и выбрасывает ссылку Object.

SqlConnection regConn = new SqlConnection(ConfigurationManager.ConnectionStrings["Student5DB"].ConnectionString); 

И убедитесь, что этот ключ определяют в Web.Config

<connectionStrings> 
    <add name="Student5DB" connectionString="Data Source=student5;Initial Catalog=FeelGoodDatabase;Persist Security Info=True;User ID=sa;Password=********" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
Смежные вопросы