日期:2014-05-17  浏览次数:20627 次

ASP.NET中数据库的操作
【题目看起来长,但并不是费时间!麻烦各位了】
string str1, str2, str3;
str1 = sql; //sql保存的是 “学生编号”
str2 = str; //str保存的是 “课程1”的课程名称
str3 = "abc";

string sql1 = string.Empty;
sql1 += string.Format("insert into Schedule values('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}')" , str1, str2, str3, str3, str3, str3, str3, str3, str3);

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
执行上述的代码后为什么总是提示下面的错误:
“/WebSite2”应用程序中的服务器错误。
--------------------------------------------
INSERT 语句与 FOREIGN KEY 约束"FK__Schedule__课程2__3F466844"冲突。该冲突发生于数据库"software_project",表"dbo.Course", column '课程名称'。
语句已终止。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: INSERT 语句与 FOREIGN KEY 约束"FK__Schedule__课程2__3F466844"冲突。该冲突发生于数据库"software_project",表"dbo.Course", column '课程名称'。
语句已终止。
源错误:

行 89: cn.Open();
行 90: //执行命令对象的方法
行 91: cmd.ExecuteNonQuery();
行 92: //关闭连接
行 93: cn.Close();
源文件: f:\Liuxiaowei\VS\Software_Project\WebSite2\Default3_1.aspx.cs 行: 91 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
其中Schedule和Course为两个表其定义如下所示:
create table Student
(
姓名 varchar(20) not null,
出生日期 varchar(8),
身份证号 varchar(20),
职务 varchar(20),
学院 varchar(20) not null,
毕业时间 varchar(8), --可以为空
用户名 varchar(20) primary key,
密码 varchar(20) not null
)
create table Course
(
课程编号 varchar(20) not null,
课程名称 varchar(40) primary key,
授课老师 varchar(60),
课程性质 varchar(10) not null, --必修选修
上课时间 varchar(30) not null,
学院 varchar(30) not null,
预备知识 varchar(100),
课程费用 varchar(20) not null,
--选课人数 int default 0 
)
create table Schedule
(
foreign key(学生编号) references Student(用户名),
foreign key(课程1) references Course(课程名称),
foreign key(课程2) references Course(课程名称),
foreign key(课程3) references Course(课程名称),
foreign key(课程4) references Course(课程名称),
学生编号 varchar(20) primary key,
课程1 varchar(40),
课程1成绩 varchar(5),
课程2 varchar(40),
课程2成绩 varchar(5),
课程3 varchar(40),
课程3成绩 varchar(5),
课程4 varchar(40),
课程4成绩 varchar(5) 
)

------解决方案--------------------
额 你这种倒是少见 
我倒是没有这样建外键过 而且你的Schedule表设计的很怪异。
错误应该是数据不符合数据库约束的要求

------解决方案--------------------
错误很明显,由于外键约束,你插入到表Schedule 的课程必须在Course里边是存在的,否则则违反外键约束

再者说,这些课程在界面上应该是用户选择的操作,而不是填写操作,也就是,课程应该是从库里查询出来然后供用户选择的,如果是这样,应该不会违反外键约束
------解决方案--------------------
违反外键约束啦
------解决方案--------------------
最简单的处理方式 ,你把你页面输入的值复制到数据库直接进行sql语句的插入,哪里错了就处理哪里,直到正常插入为止。只是建表结构的时候一般不使用中文。
------解决方案--------------------
Schedule表的“课程”必须在Course中是存在的,不然你的约束也没什么意义了