SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error or missing d
来源:互联网 发布:猎巫运动知乎 编辑:程序博客网 时间:2024/04/28 04:39
SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error ormissing databaseforeign key mismatch - EntityCommodityProperty referencingCommodityPropertytemplate解决方案
转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907
问题描述:
有一个父表,使用了组合主键(如下图):
有一个子表,需要用到上面的父表的模版信息,于是想在子表里建立外键(如下图);
结果在程序运行的时候插入数据,出现了下面的错误提示:
2015-8-24 14:19:43
----------------------------------------
System.Data.SQLite.SQLiteException (0x80004005): SQL logic error or missing database
foreign key mismatch - "EntityCommodityProperty" referencing "CommodityPropertytemplate"
at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
at System.Data.SQLite.SQLiteCommand.BuildNextCommand()
at System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at PowFundManager.SQLiteWrapper.Execute(String sqlQuery, SQLiteParameter[] parameter)
转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907
问题分析:
由错误信息可以看出:总是提示外键不匹配!!!
其实出现问题的地方也挺简单,就是因为自己的粗心造成的。当然,截图里看到的生成之后的表,我的数据库表都是在程序里用代码直接生成的。说明这个问题有截图就够了,就不贴完整的源码了。
我的子表里新建外键的时候是这样写的:
FOREIGN KEY (CommodityProTemID) REFERENCES CommodityPropertytemplate(CommodityProTemID) ON DELETE CASCADE,
但是父表里面的主键却是这样的:
PRIMARY KEY (CommodityProTemID,CommodityID)
这下知道问题所在了吧,父表里的主键是组合主键,由两个属性构成的。但是子表里面却只写了一个,而且这个属性的值是有重复的!
这样就肯定会出现外键不匹配的情况(foreign key mismatch)!
问题解决:
其实解决很简单,只需要设置组合外键就可以了,看代码:
父表不用改,子表代码修改如下:
FOREIGN KEY (CommodityProTemID,CommodityID) REFERENCES CommodityPropertytemplate(CommodityProTemID,CommodityID) ON DELETE CASCADE,
当然,子表里要先建立CommodityProTemID,CommodityID两个属性列。
转载请注明出处:http://blog.csdn.net/aaa123524457/article/details/47950907
这样,组合主键的外键设置方法、以及由组合主键引起的外键不匹配的问题就解决了!
- SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error or missing d
- SQLite的主键外键
- C# 调用System.Data.Sqlite 外键失效解决方案
- SQL logic error or missing database no such table: xxx
- System.Data.SQLite
- System.Data.SQLite错误,
- SQLite 设置主键
- android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x580608
- .Net4.0以上使用System.Data.Sqlite
- .Net4.0以上使用System.Data.Sqlite
- .Net4.0以上使用System.Data.Sqlite
- SQLite数据库建立主键/外键的方法
- Android SQLite 错误 SQLiteException: near "group": syntax error
- android.database.sqlite.SQLiteException: near "where": syntax error (code 1): ,
- 关于“SqliteException: SQLite error no such column: ”错误
- C#使用System.Data.SQLite操作SQLite
- C#使用System.Data.SQLite操作SQLite
- C#使用System.Data.SQLite操作SQLite
- 理解 Linux 的硬链接与软链接
- 匿名项目连载(五)--->发布说说
- 加载大图,解决oom问题
- 男人和小姨子看到一辆豪华的进口轿车,小姨子竟然说……
- tomcat的work目录的作用
- SQLite组合主键设置外键以及出现外键匹配出错System.Data.SQLite.SQLiteException (0x80004005) SQL logic error or missing d
- Javascript实现幻灯片效果
- java系统学习(四) --------java字符串的处理
- CVPR2015深度学习回顾
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) C(组合数+容斥)
- UVA 1584 Circular Sequence
- Redis详细,config配置,win和linux下怎么玩,和mysql数据同步。
- android color.xml
- Algorithms—268.Missing Number