你这段日志里关键信息就一句:
1:30:14…EOleException…用户'(null)'登录失败。原因:未与信任SQLServer连接相关联。
后面MudUtil.pas/svMain2.pas/StartTimerTimer/_Server_JOB_ItemGen那些调用栈只是EI(ei_20061128.exe)在StartTimer阶段去连库失败炸出来的,不是根因。根因就是EI通过OLEDB/ODBC去连SQLServer时,SQLServer当前处于“仅Windows身份验证”模式,不接受sa这类SQL登录账号,于是登录名被当成空'(null)'拒绝,抛出80040E4D那类OLE异常。
一、先把SQLServer身份验证模式改对(必做)
1.打开“企业管理器”(SQL2000)或SSMS(2005/2008)。
2.左侧展开“MicrosoftSQLServers→SQLServer组”,右键你的服务器实例→属性→安全性。
3.身份验证选:“SQLServer和Windows”(混合模式),不是“仅Windows”。
4.确定后会提示重启SQLServer服务,点是;或者手动进services.msc重启MSSQLSERVER/对应实例服务。
5.展开安全性→登录名→右键sa→属性:
•密码设成你服务端里写的那个(比如123456,别带前后空格)
•取消“强制实施密码策略”“强制密码过期”
•状态页:登录=已启用
6.重启完在服务里确认SQLServer(MSSQLSERVER)真在跑,没跑EI必炸。
如果企业管理器本身因为“仅Windows”连不进去,走注册表强改:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer
右侧LoginMode从1改成2(2=混合模式),改完重启SQL服务。
二、EI这边的连接配置要对齐(2006版ei_20061128特性)
老EI不是纯ODBC走的,它是ADO+SQLOLEDB.1直连,配置一般在同目录:
-!setup.txt
•Config.ini/DBConfig.ini
•DBServer.ini里的SQLPassword/DBPwd
找[SQL]段,按这样写:
Provider=SQLOLEDB.1
DataSource=(local)(有实例名就写机器名\实例名,如MYPC\SQLEXPRESS)
InitialCatalog=Account(你还原的账号库名,常见Account/MudDB)
UserID=sa
Password=你刚设的sa密码
PersistSecurityInfo=True
注意:ei_20061128这种2006老引擎认SQLOLEDB.1,别用MSDASQL/ODBC桥接,不然也容易空登录名。
三、ODBC数据源里SA密码输入后下次仍为空——这是正常的
WindowsODBC管理器(尤其系统DSN)默认不在UI里回显保存的SQL登录密码,点“配置”再看密码框就是空的,只要“测试数据源”能成功就行。真正参与连接的是EI自己的配置文件和密码,不是ODBC框里那串星号。只要满足下面条件就不用管它:
-系统DSN名称(如Account、MudDB、game3g)和EI配置里引用的名字一致
•建DSN时选的是“使用SQLServer登录ID和密码”
•测试连接成功
•EI配置文件的Password和SQL里sa密码一字不差
如果你服务端其实是直接SQLOLEDB连、根本不依赖ODBCDSN,那ODBC里密码空着也无所谓。
四、还连不上的补充排查
1.SQL服务没起/实例名错:services.msc看MSSQLSERVER或MSSQL$实例状态;EI里DataSource别乱填".",本地默认实例写(local)或127.0.0.1,命名实例写127.0.0.1\SQLEXPRESS。
2.TCP/IP协议没开:SQLServer网络实用工具/配置管理器里把TCP/IP启用,端口1433,本地架设防火墙放行1433。
3.库没还原:Account、Conlog、Game3g、Manage等六个核心库要从服务端备份还原进去,空实例EI一样起不来。
4.启动顺序:先DBServer→LoginSrv→最后ei_20061128.exe,全部管理员权限跑,别用兼容模式乱套。
5.密码复制带入全角空格、换行、BOM:用记事本看!setup.txt最稳。
按上面把身份验证改成混合模式+sa启用+EI配置密码对齐,那条EOleException“未与信任SQLServer连接相关联”就不会再出了,StartTimerTimer能正常进_Server_JOB_ItemGen,EI正常跑图。
1:30:14…EOleException…用户'(null)'登录失败。原因:未与信任SQLServer连接相关联。
后面MudUtil.pas/svMain2.pas/StartTimerTimer/_Server_JOB_ItemGen那些调用栈只是EI(ei_20061128.exe)在StartTimer阶段去连库失败炸出来的,不是根因。根因就是EI通过OLEDB/ODBC去连SQLServer时,SQLServer当前处于“仅Windows身份验证”模式,不接受sa这类SQL登录账号,于是登录名被当成空'(null)'拒绝,抛出80040E4D那类OLE异常。
一、先把SQLServer身份验证模式改对(必做)
1.打开“企业管理器”(SQL2000)或SSMS(2005/2008)。
2.左侧展开“MicrosoftSQLServers→SQLServer组”,右键你的服务器实例→属性→安全性。
3.身份验证选:“SQLServer和Windows”(混合模式),不是“仅Windows”。
4.确定后会提示重启SQLServer服务,点是;或者手动进services.msc重启MSSQLSERVER/对应实例服务。
5.展开安全性→登录名→右键sa→属性:
•密码设成你服务端里写的那个(比如123456,别带前后空格)
•取消“强制实施密码策略”“强制密码过期”
•状态页:登录=已启用
6.重启完在服务里确认SQLServer(MSSQLSERVER)真在跑,没跑EI必炸。
如果企业管理器本身因为“仅Windows”连不进去,走注册表强改:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer
右侧LoginMode从1改成2(2=混合模式),改完重启SQL服务。
二、EI这边的连接配置要对齐(2006版ei_20061128特性)
老EI不是纯ODBC走的,它是ADO+SQLOLEDB.1直连,配置一般在同目录:
-!setup.txt
•Config.ini/DBConfig.ini
•DBServer.ini里的SQLPassword/DBPwd
找[SQL]段,按这样写:
Provider=SQLOLEDB.1
DataSource=(local)(有实例名就写机器名\实例名,如MYPC\SQLEXPRESS)
InitialCatalog=Account(你还原的账号库名,常见Account/MudDB)
UserID=sa
Password=你刚设的sa密码
PersistSecurityInfo=True
注意:ei_20061128这种2006老引擎认SQLOLEDB.1,别用MSDASQL/ODBC桥接,不然也容易空登录名。
三、ODBC数据源里SA密码输入后下次仍为空——这是正常的
WindowsODBC管理器(尤其系统DSN)默认不在UI里回显保存的SQL登录密码,点“配置”再看密码框就是空的,只要“测试数据源”能成功就行。真正参与连接的是EI自己的配置文件和密码,不是ODBC框里那串星号。只要满足下面条件就不用管它:
-系统DSN名称(如Account、MudDB、game3g)和EI配置里引用的名字一致
•建DSN时选的是“使用SQLServer登录ID和密码”
•测试连接成功
•EI配置文件的Password和SQL里sa密码一字不差
如果你服务端其实是直接SQLOLEDB连、根本不依赖ODBCDSN,那ODBC里密码空着也无所谓。
四、还连不上的补充排查
1.SQL服务没起/实例名错:services.msc看MSSQLSERVER或MSSQL$实例状态;EI里DataSource别乱填".",本地默认实例写(local)或127.0.0.1,命名实例写127.0.0.1\SQLEXPRESS。
2.TCP/IP协议没开:SQLServer网络实用工具/配置管理器里把TCP/IP启用,端口1433,本地架设防火墙放行1433。
3.库没还原:Account、Conlog、Game3g、Manage等六个核心库要从服务端备份还原进去,空实例EI一样起不来。
4.启动顺序:先DBServer→LoginSrv→最后ei_20061128.exe,全部管理员权限跑,别用兼容模式乱套。
5.密码复制带入全角空格、换行、BOM:用记事本看!setup.txt最稳。
按上面把身份验证改成混合模式+sa启用+EI配置密码对齐,那条EOleException“未与信任SQLServer连接相关联”就不会再出了,StartTimerTimer能正常进_Server_JOB_ItemGen,EI正常跑图。

