Я пытался вставить новую строку в две таблицы, которые связаны между собой.Я написал хранимую процедуру следующим образом.
ALTER PROCEDURE InsertUserProfile
(
@UserID varchar(10),
@Pass varchar(50),
@Enabled int,
@Permission int,
@Rank int,
@FName varchar(50),
@LName varchar(50),
@Phone varchar(50),
@Email1 varchar(50),
@Email2 varchar(50)
)
AS
BEGIN TRANSACTION
INSERT INTO tbl_user_login VALUES (@UserID, @Pass, @Enabled, @Permission, @Rank)
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
INSERT INTO tbl_user_profile VALUES (@FName, @LName, @Phone, @Email1, @Email2)
IF @@ERROR <> 0
BEGIN
ROLLBACK
RETURN
END
COMMIT
Отсюда следует код ASP.NET
SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnString"].ConnectionString);
SqlCommand cmd = new SqlCommand("dbo.InsertUserProfile", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@UserID", DbType.String).Value = txtUserID.Text;
cmd.Parameters.Add("@Pass", DbType.String).Value = txtPass.Text;
cmd.Parameters.Add("@Enabled", DbType.Int32).Value = 1;
cmd.Parameters.Add("@Permission", DbType.Int32).Value = Convert.ToInt32(ddlPermission.SelectedValue);
cmd.Parameters.Add("@Rank", DbType.Int32).Value = Convert.ToInt32(ddlRank.SelectedValue);
cmd.Parameters.Add("@FName", DbType.String).Value = txtFName.Text;
cmd.Parameters.Add("@LName", DbType.String).Value = txtLName.Text;
cmd.Parameters.Add("@Phone", DbType.String).Value = txtPhone.Text;
cmd.Parameters.Add("@Email1", DbType.String).Value = txtEmail1.Text;
cmd.Parameters.Add("@Email2", DbType.String).Value = txtEmail2.Text;
sqlConn.Open();
int rows = cmd.ExecuteNonQuery();
sqlConn.Close();
Но я получаю следующую ошибку.
Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_tbl_user_profile_tbl_user_login".Конфликт произошел в базе данных «Местоположение моей БД», таблица «dbo.tbl_user_login», столбец «ID».Оператор был расторгнут.
Я новичок в хранимых процедурах, поэтому есть предложения, как мне исправить это, чтобы я мог вставить данные в две таблицы?
TABLEСХЕМА
tbl_user_login
ID (int)
UserID (varchar10)
Pass (varchar50)
Enabled (int)
Permission (int)
Rank (int)
tbl_user_profile
ID (int)
FName (varchar50)
LName (varchar50)
Phone (varchar50)
Email1 (varchar50)
Email2 (varchar50)