Как вставить внешний ключ в таблицу Referance? - PullRequest
0 голосов
/ 26 мая 2020

когда я заполняю данные веб-службы, я хочу вставить внешний ключ ??

сначала я создаю 2 таблицы

tblpersonal :

studid int  (primary key identity increment)
fname varchar(50)
mname varchar(50)
lname varchar(50)

tblcontact

contactid int  (primary key identity increment)
emailid  varchar(50)
password  varchar(50)
contactno  varchar(50)
hobby  varchar(50)
address varchar(50)
countrycodenum varchar(50)
studid (foreign key tblpersonal)

проблема заключается в том, что при заполнении веб-службы не вставляйте внешний ключ, который является проблемой, см. Изображение ниже

enter image description here

WebService1.asmx.cs

namespace WebServiceDemo
{

    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["cnn"].ConnectionString);
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string InsertData(string fname, string mname, string lname, string emailid, string password, string contactno, string hobby, string address, string countrycodenum)
        {
            cn.Open();

            var dataObject = new { fname , mname , lname , emailid , password , contactno , hobby , address , countrycodenum };

            string data = JsonConvert.SerializeObject(dataObject);

            SqlCommand cmd = new SqlCommand("insertsp_singlesp", cn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@fname", fname);
            cmd.Parameters.AddWithValue("@mname", mname);
            cmd.Parameters.AddWithValue("@lname", lname);
            cmd.Parameters.AddWithValue("@emailid", emailid);
            cmd.Parameters.AddWithValue("@password", password);
            cmd.Parameters.AddWithValue("@contactno", contactno);
            cmd.Parameters.AddWithValue("@hobby", hobby);
            cmd.Parameters.AddWithValue("@address", address);
            cmd.Parameters.AddWithValue("@countrycodenum", countrycodenum);

            int i = cmd.ExecuteNonQuery();
            if (i > 0)
            {              
                Console.WriteLine("Insert Successfully");
            }
            else
            {              
                Console.WriteLine("Not Insert Successfully");
            }
            cn.Close();
            return data;
        }
    }
}

процедура сохранения: inserttsp_singlesp

ALTER PROCEDURE [dbo].[insertsp_singlesp] 
    @fname varchar(50),
    @mname varchar(50),
    @lname varchar(50),
    @emailid varchar(50),
    @password varchar(50),
    @contactno varchar(50),
    @hobby varchar(50),
    @address varchar(50),
    @countrycodenum varchar(50)
AS
BEGIN
   insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
   insert into tblcontact(emailid, password,contactno,hobby,address,countrycodenum)values(@emailid,@password,@contactno,@hobby,@address,@countrycodenum);
END

На изображении ниже показан внешний ключ в другой таблице :

enter image description here

помогите пожалуйста?

Ответы [ 2 ]

1 голос
/ 26 мая 2020

Вы просто не предоставляете PK вашей первой таблицы при вставке во вторую таблицу. Не существует «magi c», которое позволило бы системе SQL сказать «да - это именно то, что он имеет в виду».

Вы не говорите, какую систему вы используете, но она смотрит на мне нравится SQL Server, так что я буду продолжать его использовать. Вам нужно использовать функцию SCOPE_IDENTITY (), чтобы получить последний созданный идентификатор после вашей первой вставки, а затем использовать его во второй:

BEGIN
   declare @ssi int;
   insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
   -- get the identity just created
   select @ssi = scope_identity();
   -- use it in the insert
   insert into tblcontact (emailid, password, contactno, 
                          hobby, address, countrycodenum, studid)
        values (@emailid, @password, @contactno,
                @hobby, @address, @countrycodenum, @ssi);
END
1 голос
/ 26 мая 2020

Вы можете изменить StoredProcedure для захвата последнего значения IDENTITY, вставленного в текущее соединение, а затем использовать это значение для установки значения FK

ALTER PROCEDURE [dbo].[insertsp_singlesp] 
    @fname varchar(50),
    @mname varchar(50),
    @lname varchar(50),
    @emailid varchar(50),
    @password varchar(50),
    @contactno varchar(50),
    @hobby varchar(50),
    @address varchar(50),
    @countrycodenum varchar(50)
AS
BEGIN
   insert into tblpersonal(fname, mname, lname)values(@fname,@mname,@lname);
   declare @studid int
   SELECT @studid = SCOPE_IDENTITY();
   insert into tblcontact(
               emailid, password,contactno,hobby,
               address,countrycodenum,studid)
         values(
                @emailid,@password,@contactno,@hobby,
                @address,@countrycodenum,@studid);
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...