在使用SQL Server 导入和导出向导将Excel表格导入到数据库中的表格里,执行后报错如下
错误 0xc002f210: 准备 SQL 任务 1: 执行查询“TRUNCATE TABLE [dbo].[rs]
”失败,错误如下:“Cannot truncate table ‘dbo.rs’ because it is being referenced by a FOREIGN KEY constraint.”。失败的原因可能有: 查询本身有问题、未正确设置 “ResultSet” 属性、未正确设置参数或未正确建立连接。
经历多次尝试后,发现并不是参数设置不对,数据源类型不同。而是目标表设置了许多外键关系,将这些关系一一删除后,即可导入成功。
导入数据后,又重新将这些关系添加回来。保存的时候又报错,无法截断表 ‘某表’,因为该表正由 FOREIGN KEY 约束引用。
我的解决方法是将在创建或重新启用时检查现有改为否
这个类型支持前后滚动取得纪录next()、previous(),回到第一行first(),同时还支持要去的ResultSet中的第几行absolute(int n),以及移动到相对当前行的第几行relative(int n),要实现这样的ResultSet在创建Statement时用如下的方法。Statement st = conn.createStatement(int resultSetType, int resultSetConcurrency)
ResultSet rs = st.executeQuery(sqlStr)
其中两个参数的意义是:
resultSetType是设置ResultSet对象的类型可滚动,或者是不可滚动。取值如下:
ResultSet.TYPE_FORWARD_ONLY只能向前滚动
ResultSet.TYPE_SCROLL_INSENSITIVE和Result.TYPE_SCROLL_SENSITIVE这两个方法都能够实现任意的前后滚动,使用各种移动的ResultSet指针的方法。二者的区别在于前者对于修改不敏感,而后者对于修改敏感。
resultSetConcurency是设置ResultSet对象能够修改的,取值如下:
ResultSet.CONCUR_READ_ONLY 设置为只读类型的参数。
ResultSet.CONCUR_UPDATABLE 设置为可修改类型的参数。
所以如果只是想要可以滚动的类型的Result只要把Statement如下赋值就行了。
Statement st = conn.createStatement(Result.TYPE_SCROLL_INSENITIVE,
ResultSet.CONCUR_READ_ONLY)
ResultSet rs = st.excuteQuery(sqlStr);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)