分享
 
 
 

javascript中访问数据库

王朝html/css/js·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

javascript本身是基于客户端运行的网页脚本,能和网页灵活配合,充分显示了天才性的一面,但是也由于他这个先天性的优越,使得他本身具有很多的局限性,数据库的支持就是其中的一个缺陷。 不足归不足,不过人是可怕的,只要有想法就有可能会让一些看似不可能的事情做好,事在认为,人定胜天。(不多说了)

要在javascript中支持数据库操作,我们的用上com技术,因为js本身对com对象的支持是很出色的,这点不用担心,然后我们自己设计一个可以访问数据库的com接口。OK,一切都可以很好完成。

js中使用com接口的方法:

1、传统方法: 创建com对象var objddo = new ActiveXObject("DDOENG.DDOAgent");

选择这种方法的话,在页面初始化的时候会出现一个ActiveX的安全警告,要去掉该安全警告的话,你必需的在com注册的时候同时也加上安全对象的访问权限。

方法如下:

inline HRESULT RegisterServer(BOOL bRegTypeLib, BOOL bService)

{

HRESULT hr = CoInitialize(NULL);

if (FAILED(hr)) return hr;

................

/////////////////////////////////////////////////////////////////////////////

//// ////for ISafeObject ////

/////////////////////////////////////////////////////////////////////////////

// Mark safeobject for safe initializing

hr = CreateComponentCategory(CATID_SafeForInitializing, L"Controls safely initializable from persistent data!");

if (FAILED(hr)) return hr;

// Register CLSID In Category

hr = RegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForInitializing);

if (FAILED(hr)) return hr;

// Mark safeobject for script initializing

hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");

if (FAILED(hr)) return hr; hr = RegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForScripting);

if (FAILED(hr)) return hr;

/////////////////////////////////////////////////////////////////////////////

//// ////for ISafeObject ////

/////////////////////////////////////////////////////////////////////////////

CoUninitialize();

return hr;

}

inline HRESULT UnregisterServer()

{

HRESULT hr = CoInitialize(NULL);

if (FAILED(hr)) return hr;

................

///////////////////////////////////////////////////////////////////////////// //// ////for ISafeObject ////

/////////////////////////////////////////////////////////////////////////////

// remove safeobject mark for safe initializing hr=UnRegisterCLSIDInCategory(CLSID_NGSFT_Controller, CATID_SafeForInitializing);

if (FAILED(hr)) return hr;

// remove Mark safeobject for script initializing hr=UnRegisterCLSIDInCategory(CLSID_DDOAgent, CATID_SafeForScripting);

if (FAILED(hr)) return hr; /////////////////////////////////////////////////////////////////////////////

//// ////for ISafeObject //// /////////////////////////////////////////////////////////////////////////////

CoUninitialize();

return S_OK;

}

//////////////////////////////////////////////////////////////////////

// Create Component Category

HRESULT CreateComponentCategory(CATID catid, WCHAR* catDescription)

{

ICatRegister* pcr = NULL ;

HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,

NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

if (FAILED(hr))

return hr;

// Make sure the HKCR\Component Categories\{..catid...}

// key is registered.

CATEGORYINFO catinfo;

catinfo.catid = catid;

catinfo.lcid = 0x0409 ; // english

// Make sure the provided description is not too long.

// Only copy the first 127 characters if it is.

int len = wcslen(catDescription);

if (len>127)

len = 127;

wcsncpy(catinfo.szDescription, catDescription, len);

// Make sure the description is null terminated.

catinfo.szDescription[len] = '\0';

hr = pcr->RegisterCategories(1, &catinfo);

pcr->Release();

return hr;

}

// Register CLSID In Category

HRESULT RegisterCLSIDInCategory(REFCLSID clsid, CATID catid)

{

// Register your component categories information.

ICatRegister* pcr = NULL ;

HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,

NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

if (SUCCEEDED(hr))

{

// Register this category as being "implemented" by the class.

CATID rgcatid[1] ;

rgcatid[0] = catid;

hr = pcr->RegisterClassImplCategories(clsid, 1, rgcatid);

}

if (pcr != NULL)

pcr->Release();

return hr;

}

// UnRegister CLSID In Category

HRESULT UnRegisterCLSIDInCategory(REFCLSID clsid, CATID catid)

{

ICatRegister* pcr = NULL ;

HRESULT hr = S_OK ;

hr = CoCreateInstance(CLSID_StdComponentCategoriesMgr,

NULL, CLSCTX_INPROC_SERVER, IID_ICatRegister, (void**)&pcr);

if (SUCCEEDED(hr))

{

// Unregister this category as being "implemented" by the class.

CATID rgcatid[1] ;

rgcatid[0] = catid;

hr = pcr->UnRegisterClassImplCategories(clsid, 1, rgcatid);

}

if (pcr != NULL)

pcr->Release();

return hr;

}

2、ie external方法:

创建com对象var objddo = external.GetComObj("DDOENG.DDOAgent");

这个方法需要自己去实现ie external接口并实现GetComObj方法才行,但这种方法灵活性和安全性更好,因为一切都在自己掌握中.

以上提到的对象是自定义的com对象,这个对象是在DDOENG文件中以IDDOAgent命名的接口的实例,这个接口负责所有与数据库的交互工作,比如你可以在接口中实现以下方法

Connect([in,string]BSTR host,[in,string]BSTR database,[in,string],[in,string]BSTR account,[in,string]BSTR psw, [out, retval]ULONG* pHanle);

Excute([in]ULONG handle, [in,string]BSTR query, [out, retval]ULONG* pErrCode);

StoreResult([in]ULONG handle, [out, retval]ULONG* pResHanle); FreeResult([in]ULONG HanleRes);

Fetch([in]ULONG HanleRes, [out, retval]VARIANT* pRow);

First([in]ULONG HanleRes, [out, retval]VARIANT* pRow); Next([in]ULONG HanleRes, [out, retval]VARIANT* pRow);

Prev([in]ULONG handle, [out, retval]VARIANT* pRow);

这些方法如果都已经实现了的话,那还有什么好说的

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有