发布网友 发布时间:2022-04-08 00:40
共2个回答
懂视网 时间:2022-04-08 05:01
(syncCommit) { try { return context.SaveChanges(); } catch (DbEntityValidationException dbEx) { } }
4、使用PowerDesigner设计表后生成DDL语句,执行DDL语句后表、字段、关联键都可以正常生成,可是奇怪的问题就来了,你在plsql里面select * from table1表时,提示表或者视图不存在,可是你仔细看了好多遍,表明明存在呀。还出鬼了呢。。。
问题描述:我们来看生成的DDL语句
/*==============================================================*/ /* DBMS name: ORACLE Version 11g */ /* Created on: 2015/7/2 15:45:52 */ /*==============================================================*/ drop table "TB_Department" cascade constraints; drop table "TB_Menu" cascade constraints; drop table "TB_MenuRole" cascade constraints; drop table "TB_Role" cascade constraints; drop table "TB_UserRole" cascade constraints; drop table "TB_Users" cascade constraints; /*==============================================================*/ /* Table: "TB_Department" */ /*==============================================================*/ create table "TB_Department" ( "department_id" CHAR(10), "department_name" CHAR(10), "parent_id" CHAR(10), "level" CHAR(10), "status" CHAR(10) ); /*==============================================================*/ /* Table: "TB_Menu" */ /*==============================================================*/ create table "TB_Menu" ( "menu_id" CHAR(10), "menu_name" CHAR(10), "menu_url" CHAR(10), "parent_id" CHAR(10), "level" CHAR(10), "sort_order" CHAR(10), "status" CHAR(10), "remark" CHAR(10) ); /*==============================================================*/ /* Table: "TB_MenuRole" */ /*==============================================================*/ create table "TB_MenuRole" ( "id" CHAR(10), "role_id" CHAR(10), "menu_id" CHAR(10), "role_type" CHAR(10), "button_id" CHAR(10) ); /*==============================================================*/ /* Table: "TB_Role" */ /*==============================================================*/ create table "TB_Role" ( "role_id" CHAR(10), "role_name" CHAR(10), "description" CHAR(10), "createtime" CHAR(10), "modifytime" CHAR(10) ); /*==============================================================*/ /* Table: "TB_UserRole" */ /*==============================================================*/ create table "TB_UserRole" ( "id" CHAR(10), "role_id" CHAR(10), "user_id" CHAR(10) ); /*==============================================================*/ /* Table: "TB_Users" */ /*==============================================================*/ create table "TB_Users" ( "user_id" INT, "user_name" CHAR VARYING(0), "user_password" CHAR VARYING(0), "fullname" CHAR(10), "department_id" CHAR(10), "status" CHAR(10), "createtime" DATE, "modifytime" DATE, "remark" CHAR(10) ); comment on table "TB_Users" is ‘用户信息表‘;View Code
解决方案:原来是"号在作怪,由于生成的表里面带了引号,所以当你用tb_users去查时,提示找不到该表。当你讲所有的引号去掉,再重新执行DDL,再去查询,就这样正常了。郁闷了好久吧!!如果你也是用过PowerDesigner生成过DDL语句,可能也遇到过问题。
5、用EF去连接oracle数据库时,最开始开发一直用的test用户,最近项目要上线了,在服务器上面安装好oracle,建好正式用户admin,可是奇怪的事情发生了。程序里面该改的配置文件,连接字符串都改了,数据表都创建正常,表空间什么的也都没问题,可是用admin连接的时候总是提示找不到对应的表或视图。这又是为什么呢?其实问题就在admin这个用户那里。
原因分析:因为之前开发一直用的test用户,拖EF表结构的时候也是test,这样在edmx文件中就生成了对应的Schema="Test"。而在连接数据库是,EF自动生成的Sql语句会带Test用户,所以导致找不到表。
<EntityContainer Name="ModelStoreContainer"> <EntitySet Name="TB_DEPARTMENT" EntityType="Self.TB_DEPARTMENT" Schema="Test" store:Type="Tables" /> <EntitySet Name="TB_MENU" EntityType="Self.TB_MENU" Schema="Test" store:Type="Tables" /> <EntitySet Name="TB_MENUROLE" EntityType="Self.TB_MENUROLE" Schema="Test" store:Type="Tables" /> <EntitySet Name="TB_ROLE" EntityType="Self.TB_ROLE" Schema="Test" store:Type="Tables" /> <EntitySet Name="TB_USERROLE" EntityType="Self.TB_USERROLE" Schema="Test" store:Type="Tables" /> <EntitySet Name="TB_USERS" EntityType="Self.TB_USERS" Schema="Test" store:Type="Tables" />
解决方案:重新生成表结构,或者手动改掉Schma的值。
6、查询时,有时在PL/SQL里面可以用中文模糊搜索,但是在程序调试中使用中文模糊搜索时总查询不到记录。
原因分析:由于PL/Sql里面进行过自动编码,所以支持中文检索,当程序用sql语句查询时如果没有设置编码的话可能查不到中文。
解决方案:需要在web.config配置文件加上 Unicode=true;
<property name="connection.connection_string">User ID=mall;Password=super123;Unicode=true;Data Source=EIPUAT</property>
7、oracle里面新建用户的时候,用户会有一个默认表空间,而此用户是无法访问到其他表空间下面的数据表的。这个时候需要修改用户的默认表空间或者表的所属表空间。
(1)修改表的表空间语句:
alter table TABLE_NAME move tablespace TABLESPACENAME
(2)修改默认用户的表空间:
alter user user_name default tablespace tablespace_name;
8、oracle创建自增序列。如果在sql server里面,只需要给主键设置自增长就行了。oracle可没有这玩意儿,怎么办?
解决方案:
(1) 创建自增序列,在PLSql里面的SQL 窗口中执行如下语句,创建自增序列TB_TRIAL_PROCESS_SQE
create sequence TB_TRIAL_PROCESS_SQE
minvalue 1
maxvalue 99999999
increment by 1
start with 1; /*步长为1*/
/*创建触发器*/
DROP TRIGGER TB_TRIAL_PROCESS_TRI;
create or replace trigger TB_TRIAL_PROCESS_TRI
before insert on TB_TRIAL_PROCESS /*触发条件:当向表TB_TRIAL_PROCESS 执行插入操作时触发此触发器*/
for each row/*对每一行都检测是否触发*/
begin/*触发器开始*/
select TB_TRIAL_PROCESS_SQE.NEXTVAL into :new.trial_id from dual; /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
end; /*退出sqlplus行编辑*/
(2) nhibernate的xml里面配置这个序列
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="E2E.Model.TB_TRIAL_PROCESS, E2E.Model" table="TB_TRIAL_PROCESS">
<id name="TRIAL_ID" type="Decimal" unsaved-value="0">
<column name="TRIAL_ID" sql-type="NUMBER" not-null="true" unique="true"/>
<generator class="sequence">
<param name="sequence">TB_TRIAL_PROCESS_SQE</param>
</generator>
</id>
9、oracle里面经常会遇到表被锁定的情况,有时需要手动解锁。
查看系统的锁语句:
select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode from v$locked_object lo, dba_objects ao, v$session sess where ao.object_id = lo.object_id and lo.session_id = sess.sid;
杀掉锁表进程语句:(上面的语句会得到两个字段SID和serial#)
alter system kill session ‘SID,serial#‘;/*将上面语句查询到的SID和serial#复制到本语句的相应位置执行即可*/
10、C#程序里面同时执行多条SQL语句,于此同时又不方便使用存储过程或数据库事务。一般是增删改语句。
解决方案:如果你将多条SQL语句用分号隔开放在plsql中执行是可以得到结果的。但是在程序里面直接传多条SQL语句时则会提示错误。这个时候需要在这多条SQL语句的前后分别加上begin和end。这样就能解决问题。记得原来在SQL Server里面直接这样传多条sql语句是可以的。但在oracle里面需要这么处理下。
11、未完待续......
以上是本人在使用oracle开发过程中经常遇到的问题的一些小结。目前为止先整理这么多,后续会将这个序列继续下去。
Oracle系列——开发中奇葩问题你遇到几个(一)
标签:
热心网友 时间:2022-04-08 02:09
Access Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。Access Violation常常在计算机用户运行的程序试图存取未被指定使用的存储区时遇到。参考资料:http://www.wesoho.com/showlog.asp?log_id=1403&cat_id=28