查看: 1413|回复: 0

[分享] 动态链接不同数据库

[复制链接]

29

主题

32

帖子

481

积分

超级版主

Rank: 8Rank: 8

积分
481
发表于 2019-8-13 12:55:53 | 显示全部楼层 |阅读模式
GeneXus支持多数据库的操作。在一个程序中可以链接多个不同的数据库。大多数情况下都是提前设置好数据库链接信息。
但在某些场景中,需要实现动态链接到不同数据库,如SaaS系统中,不同的公司使用不同的数据库。下方做详细说明。
1. 建立一个procedure书写链接数据库的方法

Rules
Parm(inout: &dbconn);
Java 环境下
Source
&UserID = val(&Session.Get('UserID'))
Do Case  
      Case &UserID = 1      
              &DataBase  = "companyone"   
      Case &UserID = 2         
              &DataBase  = "companytwo"   
     Otherwise        
             &DataBase  = "companyone" //此处是示例表示不同的用户使用的是数据库是哪个,如果在实际项目中,用户和数据库的对应信息应该是存储到表中。使用for each 查询即可EndCase//
&dbconn = GetDatastore("Default")
&dbconn.JDBCDriverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver"
&dbconn.JDBCDriverURL = "jdbc:microsoft:sqlserver://MyServer:1433;databaseName=" + trim(&DataBase) + ";SelectMethod=cursor"
&dbConn.UserName = 'username' //数据库用户名
&dbConn.UserPassword = 'userpassword' //数据库用户密码
上述是示例代码,做如下说明
a . rule 中的参数 必须是 inout ,&dbconn 的DataType 为 DBConnection;
b. &dbconn.JDBCDriverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"   ,其中&dbconn.JDBCDriverName 的信息可以在  GeneXusIDE -【工具】-【打开目标环境目录】 在web 目录下找到client.cfg 文件,查找如下图所示,修改自己代码中的 &dbconn.JDBCDriverName的值。
c. 如上一步操作,修改&dbconn.JDBCDriverUrl的值。如在测试的kb中,&dbconn.JDBCDriverUrl的值为:jdbc:jtds:sqlserver://DESKTOP-1NVFALH:1433/POCB  ,(说明:DESKTOP-1NVFALH 为本机的数据库server 的地址,POCB  表示现在正在链接数据库的名称)因此,需要更改为: &dbconn.JDBCDriverURL = "jdbc:jtds:sqlserver://DESKTOP-1NVFALH:1433/" + trim(&DBName)
Net 环境下
Source
&UserID = val(&Session.Get('UserID'))
Do Case   
     Case &UserID = 1         
             &DataBase  = "companyone"   
     Case &UserID = 2         
             &DataBase  = "companytwo"   
     Otherwise         
            &DataBase  = "companyone"
EndCase
&dbconn = GetDatastore("Default")
&dbconn.UserName = 'username'
&dbconn.UserPassword = 'userpassword'
&dbconn.ConnectionData = "DATABASE=" + &DataBase.Trim()

2.  进入【首选项】-【生成器】找到beforeconnect ,选择第一步中书写的procedure 的名称

备注:
如果同时链接多个数据库,只是希望其中的某个数据库动态变化,则需要注意如下的书写,即判断链接的DataStore名称以后再进行切换。

if &dbconn.DatastoreName = !"DEFAULT"
    //切换链接
    &dbconn = GetDatastore("Default")
    &dbconn.JDBCDriverName = "net.sourceforge.jtds.jdbc.Driver"
    &dbconn.JDBCDriverURL = "jdbc:jtds:sqlserver://DESKTOP-1NVFALH:1433/" + trim(&DBName)
    &dbConn.UserName = 'sa'
    &dbConn.UserPassword = '123'

endif


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|GeneXus中国技术论坛

GMT+8, 2021-2-28 01:49 , Processed in 0.062317 second(s), 21 queries .

 

© 2019 GeneXus中国技术论坛

快速回复 返回顶部 返回列表