【问题标题】:Insert into when a page load Session();页面加载时插入 Session();
【发布时间】: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


【解决方案1】:

看看你是怎么加参数的:

command.Parameters.AddWithValue("@Genre", artistid);
command.Parameters.AddWithValue("@Artist", genreid);
command.Parameters.AddWithValue("@RecordCompany", recodcompanyid);

您将 ArtistId 放在 GenreID 列中,将 GenreId 放在 ArtistID 列中。这种方式不遵守外键约束。

正确的版本应该是:

command.Parameters.AddWithValue("@Genre", genreid);
command.Parameters.AddWithValue("@Artist", artistid);
command.Parameters.AddWithValue("@RecordCompany", recodcompanyid);

【讨论】:

  • 我已经处理这个问题很长时间了,所以我切换了,这是我的错误,我像你说的那样修复了,但它仍然导致同样的错误,我不知道为什么。我在 SQLServer 上进行了这样的测试 INSERT INTO [dbo].[Albums] ( [RecordCompanyID] ,[ArtistID] ,[GenreID] ) VALUES ( 1, 1, 1 ) GO 我可以插入但在.Net 上仍然会导致相同的错误,请执行你知道为什么吗?
  • @Kazu 你有没有试过调试代码来获取这两个属性的值?完成后,检查它们是否存在于相应的表中。
猜你喜欢
  • 2014-04-28
  • 2023-03-04
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多