Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp.net中处理外键_C#_Sql_Asp.net - Fatal编程技术网

C# 在asp.net中处理外键

C# 在asp.net中处理外键,c#,sql,asp.net,C#,Sql,Asp.net,我正在制作一个连接到数据库的会员网站。所有表都已在数据库中创建。但是,我在处理外键时遇到问题。我真的不知道怎么做 我使用VS2012进行Web应用 这是会员想要加入俱乐部时填写的注册页面。在member表中,我有两个需要处理的外键:addressID、membershipID、emergencyContactEmail和clubID using System; using System.Collections.Generic; using System.Linq; using System.We

我正在制作一个连接到数据库的会员网站。所有表都已在数据库中创建。但是,我在处理外键时遇到问题。我真的不知道怎么做

我使用VS2012进行Web应用

这是会员想要加入俱乐部时填写的注册页面。在member表中,我有两个需要处理的外键:addressID、membershipID、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);  
你知道怎么解决这个问题吗?
谢谢。

您必须在ConfigurationManager.ConnectionString中使用连接字符串键,而不是使用整个连接字符串。Asp.Net无法在web.config中找到密钥并抛出对象引用

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>

它本质上是一个未定义的变量。忘记所有这些数据库内容,集中精力。ConfigurationManager.ConnectionString是一个数组,它可能有一个简单的键,与web.config的ConnectionString部分的元素相关。将整个connectionstring作为数组的索引可能不是一个好主意:请参阅中的示例了解如何使用它。Page_Load中的sql字符串代码极易受到sql注入攻击。这简直是乞求被黑客攻击。使用查询参数,就像在代码中的其他地方一样。此外,不要在您的程序中使用“sa”帐户。