MSSQLhelper 是執行SQL指令的封裝類,,封裝了常用的資料庫操作。
特點是:無需管連接配接,可以擷取執行失敗的錯誤資訊。無使用者互動界面打斷程式,CS BS模式都可使用。
很多狐友寫程式喜歡用SQLEXEC,執行失敗就籠統提示執行失敗,而不會去跟蹤和處理錯誤,這是要不得的。
以下的示例所使用的資料表來自于MSSQL的NorthWind資料庫
開發工具:VFP SP2 7423 +祺佑三層開發架構(貓框)
一:進行賬套管理配置好連接配接參數。
二:打開指令視窗執行如下指令
1 資料查詢 SQLQuery方法
參數:SQL語句,遊标名
傳回表:傳回查詢的遊标
傳回值:>=0 傳回查詢記錄數, <0 表示查詢出錯
錯誤資訊:存放于類的errmsg屬性
*-- 查詢雇員表
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery("select * from Employees","Employees")
if nRow<0
?oDBSQLhelper.errmsg
endif
BROWSE
複制
2 資料查詢 GetSingle 傳回單個值
參數:SQL語句
傳回值:傳回資料的第一行第一列資料,null 且 errmsg不為空說明查詢出錯。
*-- 查詢雇員表記錄數
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.GetSingle("select count(*) from Employees")
複制
3 執行非查詢SQL指令 ExecuteSQL方法
參數:SQL語句
傳回值:>=0 傳回影響記錄數, <0 表示查詢出錯
*--插入或修改記錄
*--傳回影響的記錄數
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.ExecuteSQL("update Employees set LastName='123' where EmployeeID=1")
複制
4 得到字段列的最大值GetMaxID方法 (MYSQL等其它資料庫未測試)
參數: 字段名,表名
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.GetMaxID("EmployeeID","Employees")
複制
5 判斷某個字段是否存在 ColumnExists方法(MYSQL等其它資料庫未測試)
參數: 字段名,表名
傳回值:邏輯值
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.ColumnExists("EmployeeID","Employees")
複制
6 執行多個語句
需打開程式PRG或表單中進行測試
TEXT TO lcSQLCmd NOSHOW TEXTMERGE
UPDATE LSNBBM SET LSNBBM_DQNM=LSNBBM_DQNM+1 WHERE LSNBBM_NMBH = 'XSFPLS'
SELECT LSNBBM_DQNM FROM LSNBBM WHERE LSNBBM_NMBH = 'XSFPLS'
ENDTEXT
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
lclsh=oDBSQLHelper.GetSingle(lcSQLCmd)
複制
三、參數傳遞的三種方式
1 private 聲明變量,即可以用?傳遞參數
private myvar
myvar = "張三"
lcSQLCmd="select * from username where username=?myvar"
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
?oDBSQLhelper.errmsg
endif
BROWSE
複制
2 利用Text to 拼接參數,支援多變量
myvar = "張三"
TEXT TO lcSQLCmd NOSHOW ADDITIVE TEXTMERGE PRETEXT 1+2
select * from username where username="<<myvar>>"
ENDTEXT
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
?oDBSQLhelper.errmsg
endif
BROWSE
複制
3 利用StringFormat拼接參數,支援多變量
lcwhere=StringFormat("name='{2}' And 機關名稱='{1}'","北京","張三")
lcSQLCmd="select * from username where "+lcwhere
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
?oDBSQLhelper.errmsg
endif
BROWSE
複制
四、傳遞自定義連接配接句柄複用句柄
1 多賬套通過賬套名選擇建立連接配接
ocon=Newobject("qiyu_connection","qiyu超類","","jcbg") &&第四個參數為賬套名
ncon=ocon.createcon() &&根據指定賬套建立連接配接句柄
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg","",nCon)
*--執行SQL
oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
複制
2 自行建立的句柄
nCon=您自己建立的資料庫連接配接句柄
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg","",nCon)
*--執行SQL
oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
複制
五、待更新(Furture)
MSSQLHelper 執行個體化(Newobject)時可以直接傳賬套名,自動建立連接配接