FIREBIRD浅历
firebird可以说是这个世界上最小而又支持存储过程的数据库,才3M而已,如果做小型应用,比ms sql(桌面版也有70多M),mysql(20-30M),方便的多。
(一)数据库操作
在开始-程序-Firebrid_2_0中执行Firebrid ISQL tool 出现
SQL>
输入
SQL>CREATE DATABASE ‘e:\sams.fdb'; 回车
提示错误,……..,郁闷,一查资料,原来是需要使用用户名和密码登录,于是在“运行”里输入(将默认的用户名和密码作为命令行参数):
isql.exe -u sysdba -p masterkey
进入命令行窗口。
再输入:
SQL>CREATE DATABASE 'e:\sams.fdb'; 回车
没有任何提示(原来FB就是这样,没有提示就表示成功),打开E盘一看多了个SAMS.FDB文件,接着再输入 :
SQL>SHOW DATABASE;
出现一些关于这个数据库的信息,建两个表吧,输入
SQL>CREATE TABLE T1 (F1 INTEGER,F2 VARCHAR(20)); 回车
什么也没看到,实际上不是,输入
SQL>SHOW TABLE; 回车
显示出来了,有一个表T1,再建一个,录入
SQL>CREATE TABLE T2(F1 INTEGER); 回车
SQL>SHOW TABLE; 回车
这一次可显示两个表存在啦,插入点东西吧,录入
SQL>INSERT INTO T1 valueS(10,’I LIKE’); 回车
SQL>INSERT INTO T1 valueS(10,’HOW ARE YOU’); 回车
SQL>INSERT INTO T1 valueS(11,’OK’); 回车
看看里面装了点什么,录入
SQL>SELECT * FROM T1; 回车
看到了有三条记录,完成前面的操作后,不想要I LIKE的那条记录了,怎么办,录入
SQL>DELETE T1 WHERE F2=’I LIKE’; 回车
再查一下看以看到确实少了这一知记录.不想要那个空表T2,就做掉吧,不过最好提交一下,这样的话把当前的表也能干掉,录入
SQL>COMMIT; 回车
提交后,下面开始做掉T2,录入
SQL>DROP TABLE T2; 回车
再查录入的这个表还有没,录入
SQL>SHOW TABLE; 回车
这次只查到一个,没有了,不完了,退出来,录入
SQL>QUIT; 回车
回到了WINDOWS窗口,下次再进入对已存的数据库就连接就OK了,见下:
SQL>CONNECT LOCALHOST:e:\sams.fdb; 回车
(二)在程序里(.net)里操纵:
Firebird .NET Data Provider是一个用来操作Firebird数据库的数据访问组件,目前的版本是1.7。该组件提供了访问和操作Firebird数据库的各种函数,其使用非常简单,使用符合ADO.NET的规范。因此在使用上我们不会有太大的陌生感。
在安装Firebird .NET Data Provider后,其提供了一个SDK文档,通过它,我们可以快速的了解并使用该组件。
在编写一个数据库应用程序的时候,第一步肯定是建立一个和要操作数据库的连接,一般我们都是使用连接字符串,而通常情况下,这个连接字符串是比较复杂的,不是十分容易记忆。Firebird .NET Data Provider提供了一个名为FbConnectionStringBuilder的类,通过它我们可以很方便的构造一个连接字符串。
FirebirdSql.Data.Firebird.FbConnectionStringBuilder cs=new FirebirdSql.Data.Firebird.FbConnectionStringBuilder();
cs.DataSource="localhost";
cs.Database=@"d:\firebird\firsttest.gdb";
cs.UserID="sysdba";
cs.Password="masterkey";
cs.Dialect=1;
FirebirdSql.Data.Firebird.FbConnection cn=new FirebirdSql.Data.Firebird.FbConnection();
cn.ConnectionString=cs.ToString();
其后操作数据库的方法就和使用ADO.NET操作SQL Server或是Access数据库没什么区别了(除了使用的类名称不同外)。
下面是填充数据集的代码
cn.Open();
string strSQL="select * from T_1";
FirebirdSql.Data.Firebird.FbDataAdapter ad=new FirebirdSql.Data.Firebird.FbDataAdapter(strSQL,cn);
System.Data.DataSet ds=new System.Data.DataSet();
ad.Fill(ds);
cn.Close();
下面是向已连接的数据库中插入记录
cn.Open();
string strSQL="insert into T_1 values("1,'2005-7-4','testvalue')";
FirebirdSql.Data.Firebird.FbCommand cm=new FirebirdSql.Data.Firebird.FbCommand();
cm.Connection=cn;
cm.CommandType=System.Data.CommandType.Text;
cm.CommandText=strSQL;
cm.ExecuteNonQuery();
cn.Close();
使用Firebird .NET Data Provider编写调用Firebird数据库的存储过程的方法如下:
cn.Open();
FirebirdSql.Data.Firebird.FbCommand cm=new FirebirdSql.Data.Firebird.FbCommand();
cm.Connection=cn;
cm.CommandType=System.Data.CommandType.StoredProcedure;
cm.CommandText="SP_1_ADD";
cm.Parameters.Add("@F1",FirebirdSql.Data.Firebird.FbDbType.Integer).value=1;
cm.Parameters.Add("@F2",FirebirdSql.Data.Firebird.FbDbType.Date).value="2005-1-1";
cm.Parameters.Add("@F3",FirebirdSql.Data.Firebird.FbDbType.VarChar,20).value="SPTest";
cm.ExecuteNonQuery();
cn.Close();
另外,参数的添加还可以使用如下的方法
FirebirdSql.Data.Firebird.FbParameter fp=new FirebirdSql.Data.Firebird.FbParameter("@F1",FirebirdSql.Data.Firebird.FbDbType.Integer);
fp.value=1;
cm.Parameters.Add(fp);
但在使用如下代码
FirebirdSql.Data.Firebird.FbParameter fp1=new FirebirdSql.Data.Firebird.FbParameter();
fp1.ParameterName="@F1";
fp1.DbType=(System.Data.DbType)FirebirdSql.Data.Firebird.FbDbType.Integer;
fp1.value=1;
cm.Parameters.Add(fp1);
添加参数,在编译的时候没任何错误但在运行时会出现"Incorrect Guid value"的错误。这样的代码在调用SQL Server数据库中的存储过程是没有任何问题的,不知这是Firebird .NET Data Provider的一个BUG,还是另有原因呢?
(三)一些区别和注意事项
1.自定义函数问题.Access to UDF library "rfunc.dll" is denied by server administrator
花了很长时间,不明白为何,将rfunc.dll拷到udf目录,bin目录,windows\system32目录都不能解决问题,google一下,网上有同样的问题,但没有解决方案,结果我重装了一下firebird就解决了.
2.存储过程中变量的定义
ms sql存储过程中无论在哪都可以定义新的变量,但在firebird中,只能在as 与begin之间进行定义.firebird的变量不能用@符号,我将@全部变成a就好了.
3.存储过程中变量的使用
select @i=count(*) from table1 //ms sql
select count(*) from table1 into :i//firebird引用变量使用冒号
4.嵌入式sql,
firebird支持select * from table exists (select ...) 或 select * from table in (select ...)
但不支持select * from (select * from ...) a,
我是将这类改写成视图解决的
5.case语句
mssql 可使用field= case (),但firebbird仅支持case () as field,
6.mssql getdate()变成CURRENT_DATE+CURRENT_TIME
select * from snartleave where dt_starttime<CURRENT_DATE+CURRENT_TIME
或
select * from snartleave where dt_starttime<CURRENT_DATE||' ' ||CURRENT_TIME
7.返回数据集的存储过程写法(firebird写法有点麻烦)
CREATE PROCEDURE SPVARTST2 (
VAR_IPTARTNO CHAR(6))
RETURNS (
VAR_ARTNAME CHAR(10))
AS
begin
for select v_name1 from snart where v_artNo=:var_iptartno into :var_artname do
suspend;
end
8.自动增长字段的使用(autoincrement)
firebird有个发生器(generator)的东东,在发生器里记录值的增长,
再用触发器实现
begin
if (new.i_seqno is null) then
begin
NEW.i_seqno = GEN_ID(GEN_T_DB_ARTSEQNO_ID,1);
end
end
//GEN_T_DB_ARTSEQNO_ID就是创建的发生器,看到没有,也就是说不同的表不同的字段可以共用一个发生器,gen_id相当于identity,看起来比mssql复杂,其实也很简单。
9.发生器重置 mssql里自动增加的字段要重置好像很麻烦,较难控制,
firebird可以这样(存储过程中)
agenerator=Gen_ID(GEN_T_DB_ARTSEQNO_ID,Gen_ID(GEN_T_DB_ARTSEQNO_ID,0)*-1+1);
//agenerator是一个整形变量,好像一定要装gen_id的值符给一个变量才行,不知道有没有更好的办法,不用定义一个多余的变量
可参考如下网址:http://www.fingerbird.de/generatorguide_body.htm
10 通过一个表更改另一个表的数据
mssql:update table1 set cname=b.cname from table1 a inner join table2 as b where a.id=b.id
firebird:update table1 a set cname=(select cname from table 2 b where a.id=b.id)
转载于:https://www.cnblogs.com/top5/archive/2010/07/22/1782749.html
FIREBIRD浅历相关推荐
- firebird mysql_FIREBIRD浅历
firebird可以说是这个世界上最小而又支持存储过程的数据库,才3M而已,如果做小型应用,比ms sql(桌面版也有70多M),mysql(20-30M),方便的多. (一)数据库操作 在开始-程序 ...
- CICC科普栏目|神经网络浅讲:从神经元到深度学习
图1 人脑神经网络 来源: 计算机的潜意识 摘要:神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向–深度学习的基础. 神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向–深度学习 ...
- python程序设计论文_浅谈初中Python程序设计教学的实践与体会
浅谈初中 P y t h o n 程序设计教学的实践与体会 冯科宇 ( 佛山市顺德区伍蒋惠芳初级中学 广东 佛山 5 2 8 3 2 5 ) [ 摘要 ] 面向中小学生教学开设的计算机高级语有很多 , ...
- 浅谈策略交易、系统交易和程式交易
新交易时代的来临 --浅谈策略交易.系统交易和程式交易 主持人:周莉莎 特邀嘉宾:hylt 近年来,我们越来越多地听到策略交易.系统交易.程式交易这些名词.许多人对其极为推崇,视为未来打开财富之门的金 ...
- 浅谈 MVC、MVP 和 MVVM 架构模式
2019独角兽企业重金招聘Python工程师标准>>> 谈谈 MVX 中的 Model 谈谈 MVX 中的 View 谈谈 MVX 中的 Controller 浅谈 MVC.MVP ...
- 浅谈解析库XPath,bs4和pyquery
<浅谈解析库XPath,bs4和pyquery> 作者:墨非墨菲非菲 前几天在CSDN看到一篇帖子,题目是"如何让自己像打王者一样发了疯,拼了命,石乐志的学习".这里面 ...
- 一位大龄程序员所经历的面试的历炼和思考
从每一段经历中学习,在每一件事情中修行.善于从失败中学习. 引子 我今年 36 岁,已有 8 年 JAVA 开发经验.在阿里云三年半,有赞四年半,已是标准的大龄程序员了. 在多年的读书.学习和思考中, ...
- 《浅谈Cache Memory》 学习-第一章
序 近些年,我在阅读一些和处理器相关的论文与书籍,有很多些体会,留下了若干文字.其中还是有一片领域,我一直不愿意书写,这片领域是处理器系统中的Cache Memory.我最后决定能够写下一段文字,不仅 ...
- 浅谈交易所发展史,BTC100顺时代,应发展,创新实力可见
**> 前言: 交易所至发展以来,已经经历了数百年的更新迭代,但"交易所"的含义在大众范畴内的普及依然很浅,甚至有许多数字资产.金融从业者对交易所的发展历程都知之甚少.但实际 ...
最新文章
- xshell安装mysql步骤_数据库Mysql与禅道安装
- Jquery的分页插件
- 阿里技术专家推荐的20本书,免费送!
- path.join 与 path.resolve 的区别
- mysql手机号11_我用不小心用 mysql 的int(11) 存了 手机号,数据都有问题,有办法恢复么?...
- CentOS查看分区的方式
- java 双等于 equals_在Java中等于equals vs Arrays.equals
- java 获取系统变量(环境变量和设置变量)
- (36)JS运动之使物体向右运动
- CentOS搭建Git服务器
- 如何高效学习web_使用高效的Web工具改善您的业务
- 清华姚班和100个张小龙
- html 百度地图坐标拾取,百度拾取坐标系统坐标反查是什么意思
- CSS 选择所有子元素添加样式
- 秘密打印机涉密计算机之间,涉密打印机与涉密计算机之间应该怎么连接
- excel表格打印每页都有表头_Excel打印时怎么让每一页都包括表头?
- 运动酒店,如何“奇袭”文旅产业精准蓝海赛道——缤跃酒店
- 小程序通过摄像头拍摄个人身份证
- LPC1768-GPIO
- PCA(主成分分析)-------原理,推导,步骤、实例、代码
热门文章
- python中怎么比较两个列表-python中如何比较两个列表不同
- 武汉python培训哪一家好一些-武汉哪个Python培训机构比较好?
- python在日常工作处理中的应用-Python全栈开发在实际工作中的应用
- python七段数码管设计图案-Python 七段数码管绘制
- python3.6.3安装-CentOS6.8安装Python3.6.3
- 我在学python-你们以为我在学C++?其实我在学 Python
- python3入门到精通pdf-Python3入门到精通实战特训
- python多久能学会爬虫-python一般学多久
- python写一个游戏多少代码-使用Python写一个贪吃蛇游戏实例代码
- python3.6.5安装教程-Centos7 安装Python3.6.5步骤