在浏览器中运行就出错了,数据库中我已经把主键撤销了!
我只会用这种方法向数据库中插入数据····
string conn = "server=PC-201005131654;database=Project;user id=sa;pwd=123";
            using (SqlConnection cn = new SqlConnection(conn))
            {                cn.Open();
                string strsql = "insert into tea_table (tea_id,tea_name,tea_sex,tea_level,tea_telephone,tea_speciality,tea_password,tea_memo) values('" + tbID.Text + "','" + tbNAME.Text + "','"+Sexid.SelectedItem.Text +"','" + ddlLEVEL.SelectedItem.Text + "','" + tbTELEPHONE.Text + "','" + tbSPECIALITY.Text+ "','" + tbPASSWORD.Text + "','" + tbMEMO.Text + "')";
                SqlCommand cmd = new SqlCommand(strsql, cn);
                SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);}
以上是我的插入数据库语句
出错信息:违反了 PRIMARY KEY 约束 'PK_user_table'。不能在对象 'user_table' 中插入重复键。
语句已终止。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 违反了 PRIMARY KEY 约束 'PK_user_table'。不能在对象 'user_table' 中插入重复键。
语句已终止。源错误: 
行 35:                 string strsql = "insert into tea_table(tea_id,tea_name,tea_sex,tea_level,tea_telephone,tea_speciality,tea_password,tea_memo) values('" + tbID.Text + "','" + tbNAME.Text + "','"+Sexid.SelectedItem.Text +"','" + ddlLEVEL.SelectedItem.Text + "','" + tbTELEPHONE.Text + "','" + tbSPECIALITY.Text+ "','" + tbPASSWORD.Text + "','" + tbMEMO.Text + "')";
行 36:                 SqlCommand cmd = new SqlCommand(strsql, cn);
行 37:                 SqlDataReader rd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
行 38: 
行 39:                /* if (rd.HasRows && rd.Read())
 源文件: e:\WebSite3\control\register.ascx.cs    行: 37 堆栈跟踪: 
[SqlException (0x80131904): 违反了 PRIMARY KEY 约束 'PK_user_table'。不能在对象 'user_table' 中插入重复键。
语句已终止。]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +177
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +68
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +199
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2300
   System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +31
   System.Data.SqlClient.SqlDataReader.get_MetaData() +62
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +294
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +1021
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +314
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +20
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +107
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior) +59
   control_register.studentadd() in e:\WebSite3\control\register.ascx.cs:37
   control_register.Page_Load(Object sender, EventArgs e) in e:\WebSite3\control\register.ascx.cs:22
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +45
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.Control.OnLoad(EventArgs e) +80
   System.Web.UI.Control.LoadRecursive() +49
   System.Web.UI.Control.LoadRecursive() +132
   System.Web.UI.Control.LoadRecursive() +132
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3743 在这给表中有触发器,同时把数据插入另一个表中,并且包括tea_id 。
这到底是怎么回事···
 

解决方案 »

  1.   

    PRIMARY   KEY   约束是不允许重复键的
    取消主键 
    if   exists(select   *   from   tablename   where   id=@id) 
        update   tablename   set  ...
    else 
        insert   into   tablename  ...
      

  2.   

    楼主不是说取消掉主键了吗:
    楼主删除后有没有 ctrt + s 保存呀?保存后有没有刷新呢?
    可以试试
      

  3.   

    这个问题是触发触发器引起的用以下步骤调试
    tea_table 的 for insert 向'user_table' 表中插入的语句可以改为以上 Wuyq11: 所述,先判断向'user_table' 主键是否存在再进行插入. 或;暂时屏蔽掉 触发器进行测试,看看是否报其它错误
      

  4.   

    你这个问题很明显是插入语句时,主键值重复了.要解决的话,写个存储过程.
    create procedure InsertData
    @tea_id,
    @tea_name,
    @tea_sex,
    @tea_level,
    @tea_telephone,
    @tea_speciality,
    @tea_password,
    @tea_memo
    as
    select * from tablename where tea_id=@tea_id;
    insert into tea_table (tea_id,tea_name,tea_sex,tea_level,tea_telephone,tea_speciality,
    tea_password,tea_memo) values('" + @tea_id+ "','" + @tea_name+ "','"+@tea_sex+"','" + @tea_level+ "','" + @tea_telephone + "','" + @tea_speciality+ "','" + @tea_password + "','" + @tea_memo + "')
    go置于判断tea_id是否存在和条用存储过程自己会吧
      

  5.   

    datatable里的键和是否允许空。改一下就好了。
      

  6.   

    CREATE TRIGGER [TRIGGER_teainsert] ON dbo.tea_table 
    for  INSERT
    ASinsert   user_table
    select  tea_id,tea_level,tea_password
    from inserted我的C#插入语句有问题··插入一条数据,结果发现表中除了我插入的具体数据还有一条空数据!
    但是不知道哪里出错了呢