调用FbConnection.CreateDatabase()创建Firebird数据库时出现“用户名和密码未定义”错误的求助
嗨,我刚接手了一个原开发者已经联系不上的项目,用Visual Studio 2022调试时,调用FbConnection.CreateDatabase()抛出了运行时异常,完整错误信息如下:
Your user name and password are not defined. Ask your database administrator to set up a Firebird login.
错误提示说用户名和密码未定义,但我翻遍了项目也没搞清楚该在哪儿配置这些信息。我刚接触Firebird和这个项目,折腾了好一会儿都没进展,感觉肯定漏了什么显而易见的点。
下面是相关的代码细节:databaseDirectory被定义为Environment.SpecialFolder.MyDocuments,在Windows 11上实际路径是C:\Users\<我的用户名>\OneDrive\Documents\,databaseFile则是database.fdb4。代码大致结构是这样的:
if (!Directory.Exists(databaseDirectory)) { Directory.CreateDirectory(databaseDirectory); } string databasePath = Path.Combine(databaseDirectory, databaseFile); FbConnection.CreateDatabase(databasePath); // 就是这行抛出了异常
问题原因&解决方法
其实Firebird哪怕是创建本地数据库,也要求你提供认证信息——哪怕是用默认的管理员账号也行,你现在的问题就是调用CreateDatabase时没传递这些必要的参数。给你几个可行的解决方向:
- 方法一:直接构造完整连接字符串
别只传数据库路径,换成包含用户名、密码和数据库路径的完整连接字符串,比如用Firebird默认的管理员账号(生产环境建议改成自定义账号):
string connectionString = $"User=sysdba;Password=masterkey;Database={databasePath};ServerType=Embedded"; FbConnection.CreateDatabase(connectionString);
这里ServerType=Embedded很重要,看你的路径应该是用的嵌入式Firebird;如果是用独立的Firebird服务端,要把ServerType改成Default,还要加上主机地址(比如DataSource=localhost)。
- 方法二:用FbConnectionStringBuilder规范构造
如果怕手动拼连接字符串出错,可以用官方提供的构造器类,更稳妥:
var csb = new FbConnectionStringBuilder { UserID = "sysdba", Password = "masterkey", Database = databasePath, ServerType = FbServerType.Embedded }; FbConnection.CreateDatabase(csb.ToString());
另外还要注意:确保项目引用的Firebird ADO.NET驱动版本,和你用的Firebird嵌入式库(或服务端)版本匹配,版本不兼容也可能导致这类奇怪的认证问题。
备注:内容来源于stack exchange,提问作者Eric Garrison

