我想在postgre和firebird数据库之间做出选择.该数据库将安装在带有asp.net 3.5的Windows 2003服务器上.我不想因为价格问题而使用sql server而且我不想要MySQL我对它以及.net连接器和会员提供商有不好的经验.
我正在创建一个简单的isql脚本,但它不起作用,我需要一些帮助来找出它的错误.
我需要连接到数据库并执行SQL文件.这是我的脚本,名为script.sql:
CONNECT 'localhost:C:\Monde\Servidor\db\monde.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
update usuario
set senha = 'MYkWEn0kHLHHdm'
where login = 'rose'
Run Code Online (Sandbox Code Playgroud)
当我尝试连接到我的数据库使用:
isql.exe -i script.sql
Run Code Online (Sandbox Code Playgroud)
我得到以下消息:
Use CONNECT or CREATE DATABASE to specify a database
Expected end of statement, encountered EOF
Run Code Online (Sandbox Code Playgroud) 我对Firebird客户端和服务器版本有疑问.我知道由于ODS更改,数据库文件必须与Firebird服务器匹配.即Firebird建议在服务器版本2.5.1和2.5.2之间备份/恢复数据库文件...
但客户端与服务器的连接怎么样?
哪种组合可以?
客户端2.5.2 - >服务器2.5.2(应该没问题;;))
客户端2.5.2 - >服务器2.5.1
客户端2.5.1 - >服务器2.5.2
客户端2.5.x - >服务器1.5
客户端1.5.x - >服务器2.5.2
有任何已知的问题吗?Firebird的推荐是什么?总是使用新的官方客户端是一个好的原因吗?但由于我们有很多客户安装,我无法确定服务器是否与客户端版本匹配.
希望有人能给我一些建议.
我通过jaybird创建了一个Firebird用户(PIPPO),跟随gsec"display":
GSEC> di
user name uid gid admin full name
------------------------------------------------------------------------------------------------
SYSDBA 0 0 Sql Server Administrator
PIPPO 0 0 GesAll 1.0 User
GSEC>
我在Firebird DB中创建了一个角色(GESALLDB_USER)并授予了一些权限:
SQL> show grant; /* Grant permissions for this database */ GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COPPIE TO ROLE GESALLDB_USER GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COVE TO ROLE GESALLDB_USER GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_CONFIGURAZIONE TO ROLE GESALLDB_USER …
我正在尝试连接到远程Firebird数据库"test"(别名已添加).它不是嵌入式服务器,安装在具有IP 192.168.1.147的VM上.
这是我的连接字符串:
用户= SYSDBA;密码= masterkey;数据库=试验;数据源= 192.168.1.147
但是我收到了一个错误:
FirebirdSql.Data.FirebirdClient.FbException(0x80004005):无法完成主机"192.168.1.147"的网络请求.--->无法完成主机"192.168.1.147"的网络请求.
我已经做了一些研究,但尚未得到任何线索.需要一些帮助.谢谢
我的IP地址是192.168.2.108,我可以成功ping通该服务器IP
我正在尝试设置一个本地firebird实例进行测试,但即使是ISQL也无法连接到它.我试图通过遵循快速入门指南以下位置:
CONNECT ..\examples\empbuild\employee.fdb user SYSDBA password masterkey;
Run Code Online (Sandbox Code Playgroud)
结果导致:
Statement failed, SQLSTATE = 08001
unavailable database
Run Code Online (Sandbox Code Playgroud)
经过一番搜索,我尝试将其修改为:
CONNECT "localhost:C:\Program Files\Firebird\Firebird_2_5\examples\empbuild\employee.fdb" user SYSDBA password masterkey;
Run Code Online (Sandbox Code Playgroud)
结果导致:
Statement failed, SQLSTATE = 28000
cannot attach to password database
Run Code Online (Sandbox Code Playgroud)
在确认我有正确的目录路径后,我决定立即联系并尝试创建一个新的DB:
SQL>CREATE DATABASE 'C:\data\test.fdb' page_size 8192
CON>user 'SYSDBA' password 'masterkey';
Run Code Online (Sandbox Code Playgroud)
这也给了我错误:
Statement failed, SQLSTATE = 08001
unavailable database
Run Code Online (Sandbox Code Playgroud)
我可能会遇到任何常见的陷阱吗?我也尝试过上面的命令,无论是否运行firebird服务.还有关于SQLSTATE代码的详细参考吗?
我有一个表t,其中一列是int类型,有几行.我想循环它.当然,我可以为此编写一个选择查询.但我正在学习程序并写了一个程序,
set term ^;
create procedure qt returns(a int) as
begin
for select i from t into :a do
suspend;
end^
set term ;^
Run Code Online (Sandbox Code Playgroud)
但是当我打电话给这个程序时,我只回到一行,
execute procedure qt;
Run Code Online (Sandbox Code Playgroud)
我知道了,
A
============
1
Run Code Online (Sandbox Code Playgroud)
我想我不明白suspend.
我有一张大约246k记录的表格.它有大约25列,除了一个小blob外都是整数.
如果我在所有字段上查询表
select a.recordid, a.editcount, ect.. from ARTrans a
Run Code Online (Sandbox Code Playgroud)
它在一秒钟内执行.但是,如果我只包括记录ID
select a.recordID from ARTrans a
Run Code Online (Sandbox Code Playgroud)
执行需要20多秒.大部分时间花在计划(自然)上似乎很奇怪,因为在大多数情况下,我有一个关于recordid的索引.
我收集了垃圾,重新创建了索引,删除了索引,在RecordID上只添加了一个索引,但它仍然超级慢.
任何帮助将不胜感激.
编辑提供更多信息:
Firebird:2.5.3.26778
fbclient.dll:2.5.1.26351
数据库中没有其他人,我已将其移至本地.
这是表def
CREATE TABLE ARTRANS
(
RECORDID Integer NOT NULL,
EDITCOUNT Smallint,
CLASSIFICATION Smallint,
TRANSID Integer,
DATEENTERED Integer,
CLIENTID Integer,
TRANSTYPE Smallint,
BILLED Smallint,
FINALIZEID Smallint,
INVOICEID Integer,
INVOICENUM Integer,
INVOICEDATE Integer,
GROUPID Smallint,
EXPORTED Char(1),
TRANSVALUE Decimal(18,4),
DESCRIPTION Blob sub_type 0,
POSTPERIOD Smallint,
LINKEDTRANSID Integer,
LINKEDINVID Integer,
LINKEDFUNDSID Integer,
INFOONLY Smallint,
NEEDTRANSFER Char(1),
DESTTRANSID Integer,
LSTTKREDIT Integer,
SPELLNGRAMMARCHECKSTATUS …Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2015/VC++上的IBPP进行攻击.IBPP是firebird/interbase API的c ++包装器. IBPP,Firebird服务器的C++客户端接口
这个软件包的一部分是一个小测试套件,你可以在这里下载: ibpp-2-5-3-1-src.zip
从测试套件开始,您将找到一个简单的批处理文件来编译它
X:\ ibpp-2-5-3-1-SRC \测试\ VS2005 \简单,运行build.bat
它使用vc ++ 2015的原生x86和x64工具链编译得很好.
在编译之前,您需要编辑84到86行
X:\ ibpp-2-5-3-1-SRC \测试\ tests.cpp
const char* DbName = "x:/ibpptest/test.fdb"; // FDB extension (GDB is hacked by Windows Me/XP "System Restore")
const char* BkName = "x:/ibpptest/test.fbk";
const std::string ServerName = ""; //"localhost"; // Change to "" for local protocol / embedded
Run Code Online (Sandbox Code Playgroud)
请记住创建目录x:\ibpptest\.
此外,您需要下载fblient文件,这些文件本身不可用,但作为整个服务器归档的一部分.获取这两个文件: 32位嵌入式 和 64位嵌入式 .
为了简化创建两个目录,除了x:\...\ibpp-2-5-3-1-src\tests\vs2005\:
x:\...\ibpp-2-5-3-1-src\tests\vs2015x86\
x:\...\ibpp-2-5-3-1-src\tests\vs2015x84\
Run Code Online (Sandbox Code Playgroud)
并复制x:\...\ibpp-2-5-3-1-src\tests\vs2005\simplest-build.bat到他们.现在将fbclient文件(32位到x86,64位到x64)复制到这些目录中:
intl/*
udf/*
fbembed.dll
firebird.msg
ib_util.dll
icudt30.dll …Run Code Online (Sandbox Code Playgroud) 我正在使用fb远程事件来监听数据库,我在我的应用程序加载内部线程启动它.
当我在我的Windows 10(本地PC)上运行它时,它正常工作并完美但是当我在Windows Server 2003上运行它时,它开始填充RAM内存比它应该多得多,当它达到服务器限制时它就会关闭.
这是我的代码:
private void DataBaseEventListner()
{
FbRemoteEvent revent = new FbRemoteEvent(M.Baza.connectionString);
FbRemoteEvent revent1 = new FbRemoteEvent(M.Baza.connectionKomercijalno2018);
revent.RemoteEventCounts += (sender, e) =>
{
this.Invoke(new MethodInvoker(delegate
{
Poruka p = new Poruka(Magacin.Poruka.UcitajPoslednjuPorukuID(Korisnik.korisnikId));
p.Show();
}));
};
revent1.RemoteEventCounts += (sender, e) =>
{
switch (e.Name)
{
case "PP_NEW":
case "PP_UPD":
Thread thread1 = new Thread(UcitajPoslovnePartnere);
thread1.Start();
break;
}
};
revent.QueueEvents(String.Format("nova_poruka~" + Korisnik.korisnikId.ToString()));
revent1.QueueEvents(new string[] { "PP_NEW", "PP_UPD" });
}
private void UcitajPoslovnePartnere()
{
poslovniPartneri = Komercijalno.Partner.Lista();
}
public static List<Int_String> …Run Code Online (Sandbox Code Playgroud) firebird ×10
firebird2.5 ×3
database ×2
isql ×2
64-bit ×1
asp.net ×1
c# ×1
c++ ×1
exception ×1
firebird2.1 ×1
interbase ×1
jaybird ×1
performance ×1
postgresql ×1
privileges ×1
role ×1
server ×1
sql ×1