【发布时间】:2015-11-14 00:14:32
【问题描述】:
当页面打开时,我想在这个页面中插入 3 个值,分别是 Genres,Artists,RecordCompanies 在这个表单之前的主键,并将作为外键插入到这个表中,也就是专辑。
我的桌子是
专辑-------------
相册 ID 主键
发布日期
RecordCompanyID 外键
ArtistID 外键
GenreID 外键
唱片公司------------------------------
RecodCompanyID 主键
唱片公司名称
类型---------------
GenreID 主键
类型
艺术家-------------------------------------------
ArtistID 主键
艺术家姓名
namespace WebApplication6
{
public partial class WebForm15 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["genreid"] != null && Session["artistid"] != null && Session["recordcompanyid"] != null)
{
Label7.Visible = true;
Label7.Text = "Welcome : " + Session["genreid"] + "Welcome : " + Session["artistid"] + "Welcome : " + Session["recordcompanyid"];
}
else
{
Response.Redirect("~/BenEManagementGenre.aspx");
}
if (!IsPostBack)
{
String Artists = System.Configuration.ConfigurationManager.ConnectionStrings["FleetManagementConnectionString"].ConnectionString;
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(Artists);
int artistid = Convert.ToInt32(Session["artistid"]);
int genreid = Convert.ToInt32(Session["genreid"]);
int recodcompanyid = Convert.ToInt32(Session["recodcompanyid"]);
SqlCommand command = new SqlCommand(@"INSERT INTO [dbo].[Albums] (GenreID,ArtistID,RecordCompanyID)
VALUES (@Genre, @Artist,@RecordCompany);" + "select scope_Identity() as ID", con);
command.Parameters.AddWithValue("@Genre", artistid);
command.Parameters.AddWithValue("@Artist", genreid);
command.Parameters.AddWithValue("@RecordCompany", recodcompanyid);
con.Open();
SqlDataReader rd = command.ExecuteReader();
int ID = -1;
while (rd.Read())
{
ID = int.Parse(rd["ID"].ToString());
}
rd.Close();
con.Close();
Session.Add("albumid", ID);
}
错误提示
INSERT 语句与 FOREIGN KEY 约束冲突 “fk_AlbumsRecordCompanyID”。数据库发生冲突 “KazuTest”,表“dbo.RecordCompanies”,列“RecordCompanyID”。
理论上,当我打开页面时,我插入了 3 个外键值,所以我已经插入了外键。那么为什么会出现这个错误呢?
【问题讨论】:
-
RecordCompanyID列插入的值是多少?RecordCompanies表中是否有匹配的键?该错误表明没有,我倾向于相信它。 -
您是否至少尝试过使用
debugger单步执行代码并确保您的密钥未设置为自动生成,错误消息也告诉您确切的问题是什么。跨度> -
附带说明,除非您使用存储过程(我会推荐),否则您需要小心使用 AddWithValue。它可能会导致数据类型不正确并导致一些丑陋的挑战。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…
标签: c# .net sql-server