草根站长必学:不再害怕“80004005”错误!
在编写WEB应用程序的过程中,我们常常要跟数据库打交道,例如我们日常经常用的数据库ACCESS、SQL SERVER等。在连接这些数据库的时候,系统往往会给我们一些象这类“80004005”错误,这些五花八门的错误信息很另人头痛。为了方便网友解决这类问题,本文将详细的介绍和解答这类问题。- }: d$ F5 Q# }! C
+ x5 q' u- `( Y! w) i; w! _ [错误信息]
6 o! f8 y) y0 F% G0 l+ L. v5 g' L7 {: c# D* Y& T! ?2 E B
Microsoft OLE DB Provider for ODBC Drivers error '80004005'' i- N5 i! C$ J# S
[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database/ f/ M2 }- W; D. w: U
engine cannot open the file '(unknown)'. It is already opened exclusively
8 S$ P: q. M, c by another user, or you need permission to view its data.& ~. l W7 N/ u+ S$ [$ w
( V1 a {. ?. v. W3 ]2 y: i# }3 T5 Z [原因]
: r2 Q/ E# ^' c$ a0 {6 U% z9 i V) K T6 v5 c e" C# A
这个错误发生在IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在目录没有正确的权限.
4 V# h( }: X/ i; h& a" i3 g" w+ L0 u1 l
[解决方法]# T& T5 w: J" ~, ?" j( f- o
M5 G4 R$ d8 m' x
1、检查文件和目录的权限. 保证Evryone能够在该目录中有新建和删除临时文件的权限。. ]$ ]/ ]" J: z8 B
2、检查数据源文件(DSN)是否被别的程序标志在使用中,这些程序一般都是Visual InterDev,关闭任何一个正在InterDev中打开和数据库连接的项目。
- K2 w$ b; G+ r# G! {2 c. I- ~9 [/ ` 3、检查ACCESS中的某个表是否在这时已连在一个网络服务器上。% N( ]$ H1 i9 U% j
" c. |9 f% m- o# c( J
A5 r8 ?( Q W
[错误信息]/ r' G8 Z6 f0 ] H' J' P" D% ]
8 m8 c' C8 f1 N. s+ g6 g
Microsoft OLE DB Provider for ODBC Drivers error '80004005'! c: F6 Z) }$ D; n
[Microsoft][ODBC Microsoft Access 97 Driver] Couldn't use '(unknown)'; file
& l- X: w$ k/ T9 Walready in use.
/ e @% u; t- @1 S& q1 q4 F, f3 c. }: J
[原因], W- a7 \ }# a) c: g
# B: k" @0 ?* ~. s% |" ]. C 要连接ACCESS数据库这时正在被使用使数据库被锁定,导致无法访问。
4 ?9 c+ l: D$ }( p# o
0 o! |, I! U1 o, H6 y1 k
0 U# ~6 ^5 m1 S9 f) z [错误信息]3 [/ [* j% }/ q) s
% I) I8 `5 _) S4 z
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
, Z, F$ ~& E. z1 g& g) _! w$ _[Microsoft][ODBC Driver Manager] Data source name not found and no default) J7 B5 E/ S; T
driver specified.
4 t4 w: U1 t9 @2 E5 H$ |" F" c: u) n8 Z
[原因]$ e# M$ |; j) S1 y _
# K, }5 j6 |/ a$ a, S2 d9 c6 ~0 ` 可能的原因是ConnectString在global.asa中初始化的Application连接字符串 ,而这时global.asa文件却没有正常工作。
3 O( m2 K6 i- m
1 ?" b: D# a' ?+ u# ? [解决方法]' F+ R! w. v" i& @8 M
/ Y) g" b6 j' `5 D L
检查赋值时是否正确,在asp中加入下面的代码:
8 H* `0 k$ |% v, m <%= "'auth_user' is " & request.servervariables("auth_user")%>; j" C1 C0 p% `' b; T
1 K, i% ^( z' P) @. I* r4 L- N <%= "'auth_type' is " & request.servervariables("auth_type")%>
# ^4 I% k A6 M f1 ^
0 p( Z0 ?. i) M2 B" A) O
8 ]' Z- o6 z7 O$ ^4 n/ u <%= "connection string is " & session("your_connectionstring")%> S3 L4 R# P* A" o$ e! X
$ k9 a1 ?2 B# J
+ V/ c$ ?0 Z5 w S0 R; Q7 o+ A 还有一个原因就是在ConnectString中加入了空格,例如
) |0 A1 I& a& y) h( W/ n | DSN = MyDSN; Database = Pubs;, Y5 }; a7 y' R; Q' ^- M
试试改成下面这个样子:
# z' b M, J9 `' s DSN=MyDSN;Database=Pubs;
. A" q' D( j3 H$ y% }1 Z$ g 如果是global.asa还没有被运行,检查该文件是否在运用程序的根目录中,或者是虚拟目录的根目录中。
8 J7 n( H! z7 T" b6 _9 x
( r3 d' f# |% r0 i8 ~ N8 ]$ B 还有可能错误出现的原因是DSN名称没找着,这可以采用我提供的id=36767的办法解决。最后是检查是否安装了最新的驱动程序,既是否是最新的MDAC版本。1 \4 ] i( Q- d5 ^/ m$ B& N. g- N1 y
$ e. o+ c7 _7 r& N5 h R
[错误信息]+ ~/ _4 p! X- H$ ~& w2 @6 w
% f1 I( I8 b+ o8 e9 ]7 R
Microsoft OLE DB Provider for ODBC Drivers error '80004005'/ A" S+ ?$ F) q( X5 f
[Microsoft][ODBC Driver Manager] Data source name not ??1 h9 i, L2 m* V) R+ @: E8 Y; o6 c2 [
0 l+ u) B8 I1 C8 W) E3 g6 b
[原因]
+ x7 a5 a( I' t2 a% ?0 e; j8 v8 q
, T* l6 z: s5 J2 Z8 V( Z# i7 C 这个错误有可能是出现在你的计算机上软件安装(或则反安装)的顺序上。如果ODBC的版本不一致的话,就会发生该错误。
0 M+ f2 X! N: h: I$ [ H% a
# Z7 H2 n0 v0 Z. u" Q1 Y [解决方法]2 E' d6 U( j9 C" `; r+ c- N
: K! k" d, m0 P: U8 K) d6 m) c
办法是安装最新版本的MDAC。
' t3 h$ G5 }* I. c
8 U; }+ _0 N _- v
7 F( ^+ z8 i1 g [错误信息]
' x9 M1 ?, h) K
& b0 g8 n9 V; ?2 H/ _9 E Microsoft OLE DB Provider for ODBC Drivers error '80004005'
X& l F- V4 D9 X4 T+ V [Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open
$ A$ z) c8 J- b: U1 h registry key 'DriverId'.
/ g1 _2 s3 Z( X: }$ L- B1 N* ?% B6 |4 I
[原因]* s! J2 K2 x* x4 \5 b( M: G
- u g5 O* F* D) w 这个错误发生在从注册表中读取数值的时候。 使用regedit32.exe检查注册表的权限。$ q$ P- e3 H' |6 {: L) ^
0 d7 @9 p: {3 p/ g" `
C7 g0 K) r, q5 _0 S! x! C3 s! F [错误信息]
9 K- }# Y1 P) }& B( ~/ U' A5 I) ^ q# d
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
2 {4 r" ^" [- r0 g9 W! l [Microsoft][ODBC SQL Server Driver][dbnmpntw]ConnectionOpen (CreateFile()).
) A- @$ s* R6 c( _5 }% i- j
+ [ w+ G# ?2 {5 L { [原因]9 } @# d# d& }; c* ]7 {
5 x4 Z$ d6 D. k! x- C; J
原因之一:当一个数据库中包含有分别在不用机器上的许可关系时,这也可能发生在同一台机器上,当给一个关系设置了UNC路径,而另一个关系却是本地路径。
/ T! ~. x( @' \& x( ?9 F% x8 R原因之二:当用户使用IIS匿名帐号登录后,对本地这台机器而言他是有权的,但是对于一个UNC路径的机器,另外这台机器是不会认为你当前匿名登录的帐号在它那上面也是合法的。这样它就不允许你访问它上面的资源,导致错误。
9 O) o: D) @' q
8 T4 K; m5 ^! g% X [解决方法]
, D3 V" U2 f9 Y& G: t
" x* f [2 N7 z$ u 1、在IIS工具中,改变IIS匿名帐号成另外一个基于域的帐号。(也就是不使用匿名登录)2 Y1 Q0 }# p& e
2、或则在那台你要访问资源的机器上也创建一个和当前匿名帐号同样的帐号,使用同样的密码。6 d4 h5 x6 M" O2 m
5 k, W" n* }" k* m Y8 w. v& O% [
[错误信息]3 |5 D5 `5 ]" s2 S1 r8 {5 [* A! ^5 r
& ?3 n5 J( N- P/ ^- _, b
Microsoft OLE DB Provider for ODBC Drivers error '80004005' Microsoft][ODBC
. s( o3 S; Z2 P- } Microsoft SQL Driver] Logon Failed(); k8 ^: w# m/ H5 r. Y9 Q& W
# a/ p" c, w8 w, ? [原因]
' j* U: g; c/ ^7 j& q( d5 ]# T: c* N) M7 W
该错误是由SQL Server产生的,当它不接受或则不能够认识这个登录帐号的时候,或者没有使用管理员身份登录,
4 b$ O& H% O8 g' b! m R# w/ c; z 也可能是在NT中没有SQL影射帐号造成的。- g. i8 t% u: l- b' y
& `% @2 f+ U" ^ [解决方法]! }! k/ W0 z0 S, S! ^; O- ]
$ f' R7 u' h+ P' c. J+ ]4 ~
用系统管理员帐号(SA)登录,一般密码应该为空.注意,这时必须使用CoonectString而不能够使用DSN文件。因为DSN中没有保存用户名和密码。检查NT是否给SQL映射了帐号。, h/ w% r. k/ h4 z3 e
$ R4 w) W& ]+ h5 A: @6 V/ I3 @) K% k! q [错误信息]8 C- Z! ]* T; J" D) g
1 f4 q0 {: k6 A1 ^3 b8 W: ?
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
0 n% D. ^2 s# o: B6 g3 B [Microsoft][ODBC SQL Server Driver][SQL Server] Login failed- User: Reason:: L9 `* d( k8 |- d J0 p* d
Not defined as a valid user of a trusted SQL Server connection.
1 x: g4 a. C: _6 z" C" X
0 A7 m7 V/ E) q1 p: I1 U/ V [原因]
1 J5 q' c2 K( K/ v$ @' M 该错误是由SQL Server产生的,当它不接受或则不能够认识这个登录帐号的时候,或者没有使用管理员身份登录,也可能是在NT中没有SQL影射帐号造成的。
( q x& R v+ X! L1 \( Q, ]- |' a6 q2 C1 f; p7 A* k
[解决方法]
0 ^+ A- o. l2 b" v, q8 v7 O$ X7 T( n
在SQL Server的Enterprise Manager中,选择Server/SQL Server/Configure[ASCII# N3 U" X. u1 A2 L; O- {1 U
133]/Security Options/Standard。如果是运行在IIS4中,取消选择该项目的Password Synchronization选项。