找回密码
 注册
查看: 4993|回复: 0

[收藏]通过写入注册表添加ODBC数据源

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
, C# |' }" J& Y2 ?7 k2 X: w* c& ?/ c$ B% L/ h/ \% z
void RegisterDBSource(CString strDSName, CString strDBPath)+ o: X1 _5 {  b7 V
{
8 w( b! K( z& Q+ H1 \( b HKEY hKey;
1 u4 I  [. s+ u& t8 ?. v  Z0 q    DWORD nLabel;
" c  B, W8 z/ M5 `1 r4 D) I' F) R( e8 `) M: T8 }6 a% c
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
# c% P* {+ q- G CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;2 g  }. M/ A8 S; q1 X. q0 B
0 j+ V1 R9 K) i. A' q1 B
if(strDSName.IsEmpty()) return;
: o* P7 Q$ t3 x- F if(strDBPath.IsEmpty()) return;
% C, e: D% |" A
" J; Z  W: B( g9 \! g CString strDataSource = strBaseKey + _T("\\") + strDSName;( N: c3 ?+ v% F3 r) P
2 d  d" c# ~/ j( j! \) U2 ?' y
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
0 E( D1 L5 Z3 j* D' { CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");2 j' z4 T" ~" S" N% n3 O
CString strFIL = _T("Ms Access;");# S8 t5 H. e+ W2 ?5 \' Y: a- K
CString strUID = _T("");7 t$ o5 N; i  V

8 A9 W! A6 j6 \' h2 W! B / P5 z  ]( Z  U) T: I

8 ~9 R4 o9 y$ `7 a( p RegCreateKeyEx(HKEY_CURRENT_USER,0 {, l' z2 Y$ v( x6 g" z+ }
             strMid,7 ?6 x% e8 p8 }; L  O+ Z0 W
       0, & c. A' ~8 |% |* `
    NULL, ! ~% f4 V& d- a  S: o+ d
    REG_OPTION_NON_VOLATILE,
* E6 h8 {5 e6 ^5 M" r' \     KEY_ALL_ACCESS,& p7 ~- c" W, q9 t
    NULL,* f3 T0 E( ^) i/ x+ f% z
    &hKey,
) ^( e* |5 G  n# P* x) T     &nLabel );//获取数据源键值句柄/ O$ @% \$ L* o

) {; J8 F& h( n* ^ RegSetValueEx(hKey,( b6 r0 O: u# u$ y
     strDSName,
# q$ M# g1 Y7 j8 [6 z      0,
4 s0 @) n. X- o' M6 V      REG_SZ,* }" C% w- I1 n, g* \# {* u
     (const unsigned char *)((LPCTSTR)strMdb),' d8 v/ L1 m% O( E
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
- A- D) E( T* G) Z0 L% t+ d
7 I5 ^: A1 ]" l' Z- H1 r; Y RegCreateKeyEx(HKEY_CURRENT_USER,
$ z, [" C2 k. a  V% o          strDataSource,- c# P0 [. F6 v
   0,
8 F5 [! V5 C0 |' y6 ?5 u    NULL,
& ]6 E, `3 Q9 ~+ g* u    REG_OPTION_NON_VOLATILE,
: u2 Z4 l. a1 a4 i, e    KEY_ALL_ACCESS,
2 l% [) l. }& X; U7 i$ Q    NULL,% \, u7 M7 |% D/ F( h5 D! w
   &hKey,
& a& e. w" M" k/ Q$ O2 ?5 z  g3 X3 m    &nLabel );//创建数据源子键
- c1 w8 Z5 A$ R, k  o+ y. C  K) t
3 G$ M/ m$ m- x4 G RegSetValueEx(hKey,
4 N; M/ n! q6 @/ E8 \" U$ g      _T("DBQ"),
7 b# e1 j  e8 P/ m$ q      0,
+ k8 D$ m1 O( u4 i8 P      REG_SZ,9 E4 |& E8 F$ k9 D+ g6 X3 [
     (const unsigned char *)((LPCTSTR)strDBPath),
8 v7 ]6 g4 B- T9 P- p+ R8 o      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
# d6 ^0 l& i  C, ^" {) c3 l& j: D- l
  RegSetValueEx(hKey,
3 l2 W4 W( y! k/ w            _T("Driver"),. G  g- ^: w  i
     0,) V- }1 B, ^8 C, Y9 p2 Y- b4 Z5 W
     REG_SZ,
0 p' h) h  }- p# o3 y7 `      (const unsigned char *)((LPCTSTR)strDBDriver),
. e% X) u* v" t7 ^/ j      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径6 e! P' P0 R4 A, H% U% s2 E
( g! `  b8 z, p9 X8 T
RegSetValueEx(hKey,; Y1 a6 i/ m3 J7 g0 T. e
     _T("FIL"),5 V. {) ?6 R" J2 V$ u1 p6 A& t
     0,- i' ]" y& ^5 A
     REG_SZ,
% X3 p1 y, V7 f1 v+ G8 o- Y/ a      (const unsigned char *)((LPCTSTR)strFIL),
5 v3 \0 U- O" T- O      strlen((LPCTSTR)strFIL)+1);//表的类型
3 v4 z$ F* Y7 p
: ^% Z' T' d% J8 v4 { RegSetValueEx(hKey,
# A/ {' f; W1 O& T6 z  ]      _T("UID"),. d' I' W+ U7 q! A) ~& U
     0,! k) t  \. s+ x$ k0 B: d6 K
     REG_SZ,
+ H0 |1 X& h* w0 p8 Z  `* q: [      (const unsigned char *)((LPCTSTR)strUID),) S- m: S$ P) a& T2 R
     strlen((LPCTSTR)strUID)+1);//必须项
# B0 P- H4 H  ?8 j% o5 Z0 S4 u! w0 ]. o7 E1 f* t

2 S/ _# k2 V! r- U' ~ DWORD DriverId = (DWORD)25;+ ^1 F! b# R0 d7 R! ]' H3 y
RegSetValueEx(hKey,
3 E, G, q# O9 l* f: z     _T("DriverId"),
) c2 e1 `# _) ?" D     0,& _. N5 h5 C8 x: v+ z+ ^
    REG_DWORD,$ f4 q/ p, Z+ w$ I9 L. A8 P# o
    (const BYTE *)(&DriverId),
* s% s! P- d* A; A1 S9 p  u! Q" u     sizeof(DWORD));//必须项" N! N% z* E- ]# R0 }3 _5 g
! A7 R! P" e) c4 g% e! i/ y

. B) o$ u1 Y2 g0 P, f0 J- R9 O DWORD SafeTrans = (DWORD)0;
, A+ F# s, H) @- Y1 |, I2 x RegSetValueEx(hKey,
0 h7 B' Q4 N. |7 q4 v0 R      _T("SafeTransactions"),
9 }. ]: O9 K2 K, X      0,
& a. K0 Z8 H7 P6 c4 a      REG_DWORD,8 u0 A* R9 L% A8 K$ V
     (const BYTE *)(&SafeTrans),/ ~* B7 [) }8 u+ L) j: w
     sizeof(DWORD));//可选项% Z- H4 N* i6 U
}1 u% X6 q- |: Y: k5 ~' j3 B

3 \4 [4 n3 C" {% O
# u/ e; h' R" Q
1 O' b+ H- C. t9 ~6 o; b+ \调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-1 20:48 , Processed in 0.016000 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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