学习开发时遇到的种种问题,皆为亲身经历与真实记录。
1、 在调试软件的数据库工具-数据入库-栅格数据导入功能时,已提前在本地计算机配置好SQL Server与ArcSDE环境,软件可正常连接数据库。然而,在执行栅格数据导入操作时,系统弹出错误提示:Underlying DBMS did not accept username/password(底层数据库管理系统未接受用户名或密码)。经排查,该异常发生在代码调用rasterSdeServerOperation.Create()方法处,表明虽能建立数据库连接,但在创建SDE服务实例过程中因认证失败而中断,问题可能涉及权限配置、用户凭据验证或SDE服务设置等方面。
2、 问题源于后台代码设定了固定默认密码,未采用用户在界面输入的账号密码,导致尝试解决但未能成功。
3、 修改代码以读取用户输入的密码后,问题依旧存在,sdeCon.Password未能正确获取输入的密码内容。
4、 由于安全考虑,ESRI对IPropertySet::GetProperty设置了限制:允许向其中写入密码信息,但禁止直接读取已存储的密码内容。这一机制旨在防止敏感信息泄露,确保系统在处理认证凭据时具备更高的安全性,避免未经授权的访问或窃取密码数据。
5、 删除代码中sdeCon.Password = sde这一行即可解决问题。
6、 可以删除图中 sdeCon.Password = propertySet.GetProperty(password).ToString() 这行代码,也就是不再通过 IPropertySet::GetProperty 方法设置密码参数,仅保留服务器地址、用户名等相关属性的赋值。当程序运行时,若未提供密码信息,系统将自动弹出登录窗口,提示用户手动输入密码(所示)。这种方式提升了安全性,避免密码以明文形式出现在代码或配置中,同时增强了灵活性,适用于需要动态认证的场景。
7、 开发过程中出现缺少ArcGIS Engine Enterprise Geodatabase许可的提示,意味着当前环境未启用访问企业级地理数据库所需的授权。该许可是ArcGIS Engine组件中用于连接和操作企业级Geodatabase的特定权限。要确认本机是否具备此许可,可通过ArcGIS Administrator工具查看已激活的扩展模块,检查其中是否包含Enterprise Geodatabase支持。也可在代码中调用许可验证接口,检测当前可用许可类型,从而判断是否拥有相应权限。
8、 所示,GDB Update许可等同于ArcGIS Engine Enterprise Geodatabase许可。这表明,在ArcGIS Administrator中所显示的Geodatabase Update许可,实际上即为ArcGIS Engine提供的企业级地理数据库更新许可,两者名称不同但实质相同,功能一致,可用于支持对企业级地理数据库的编辑与更新操作,确保用户在分布式环境中具备相应的数据访问和修改权限。
