在C/S结构下,程序使用ADO直接连接SQL 2000数据库,请问如何设置客户端的ADO连接字符串?

时间:2021-10-18 05:51:10
在C/S结构下,程序使用ADO直接连接SQL 2000数据库,请问如何设置客户端的ADO连接字符串?使他可以动态的适应服务器的机器名和判断服务器是否使用WINDOWS集成登陆和SQL单独登陆?
  因为我以前一直使用BDE通过ODBC连接的,所以那时只要在客户端把ODBC设置正确就可以使用了,可现在改为ADO后,不知如何动态设置去适应了?

18 个解决方案

#1


放一个ADO控件在程序中,根着导航做一边,就会了. :)

#2


双击adoconnection控件,会出现一个配置向导,里面会有配置串

#3


Adoquery的connectionstring属性动态赋值:Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=...;Data Source=...   更改...的地方,第一个位要连接的数据库的名称,第二个为数据服务名称,这个动态赋值串可以在属性的connectionstring,点击出现对话框按提示继续就可以了!

#4


adoconnection.connectionstring:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=SERVERNAME;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CLient1;Use Encryption for Data=False;Tag with column collation when possible=False';//用时自己修改各个属性的值
adoconnection.open;

#5


connectionstring属性,但最好不要直接把连接串写到程序里,因为这样很容易被人在exe搜到
,写到外面的文件里(加密)或者动态生成,怎么说c/s的程序都不安全,有机会改b/s把
将来发行和升级都容易

#6


楼上 hdjking(永昊)已经说祥细了我就不多说了!
---------------
爱如火,紫如情!
---------------

#7


难道是我考虑的太复杂了吗?还是没有表达清楚?

我知道可以用ADO去配置他的连接向导,可那些都是静态的,那时或得的机器名和其他参数都是自己写程序机器上的参数,当编译后,我还怎么去连客户的电脑?难道只要用我的程序的都要变成我编程时的机器名和其他参数吗?

至于hdjking(永昊)网友的连接我也会的,而且你还没有考虑到如果你使用的是WINDOWS集成登陆的话,这样的连接字符串是连接不上的,我现在问的主要是客户端如何设置ADO字符串连接服务器的SQL 2000数据库?

#8


你的客户端一样要安装sql2000的客户端吧,那这个服务启动的就是你在connectionstring里的Data Source=...   啊,不是吗?

#9


现在是如果客户使用的是WINDOWS集成登陆的话,那个USER ID和PASSWORD都怎么设置呀?

#10


我也有一样的困惑,就是怎么变成一个变量connection。客户机在第一次启动时,把路径、用户、密码赋给该变量就行了,但我也不知该怎么设这个变量

#11


const  GIniFileName = 'init.ini';

procedure Tdatamodule2.DataModuleCreate(Sender: TObject);
begin
  IniFile := TIniFile.Create(GetIniFilePath);
  ser_ip:=IniFile.ReadString('sever_ip', 'sever', '');
  user_name:=inifile.readstring('user_name','default_name','');
  user_pw:=inifile.readstring('user_pw','default_pw','');
  dbname:=inifile.readstring('dbname','database','');
  IniFile.Free;
  ADOConnection1.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=false'
    + ';User ID=' + user_name
    + ';Initial Catalog=' + DBName
    + ';Data Source='+ser_ip
    + ';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096'
    + ';Workstation ID='+localip
    + ';Use Encryption for Data=False'
    + ';Tag with column collation when possible=False';
end;

function Tdatamodule2.GetIniFilePath: string;
begin
 FRootPath := ExtractFilePath(Application.ExeName);
  Result := FRootPath + GIniFileName;
end;

#12


上面的方法是读取ini文件里的服务器明、数据库明、用户名、密码信息
然后形成connectionstring

#13


我觉得IORILI 的做法已经很好,推荐!楼主不要给我分!

#14


谢谢 IORILI(沒落的阿咎)的回答,按你的方法基本可以了,谢谢!
现在又来个问题,就是你的方法都是考虑非WINDOWS集成登陆的情况,因为我发现如果SQL 2000使用的WINDOWS集成登陆时,那些用户名和密码都无法使用,这如何解决,而
他的连接字符串替换为了
  INTEGRATED SRECTUTE !1

#15


如果是WINDOWS集成登陆的话,用户名改为WINDOWS登陆名 密码为登陆密码

#16


那样就是不行呀,我不知道是咋回事?

#17


在服务器端,加入用户:客户端用户,密码,然后用户名=客户端用户名 ,密码=密码

#18


就是要在服务器端给客户端访问服务器并且访问数据库的权限,

#1


放一个ADO控件在程序中,根着导航做一边,就会了. :)

#2


双击adoconnection控件,会出现一个配置向导,里面会有配置串

#3


Adoquery的connectionstring属性动态赋值:Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=...;Data Source=...   更改...的地方,第一个位要连接的数据库的名称,第二个为数据服务名称,这个动态赋值串可以在属性的connectionstring,点击出现对话框按提示继续就可以了!

#4


adoconnection.connectionstring:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=SERVERNAME;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CLient1;Use Encryption for Data=False;Tag with column collation when possible=False';//用时自己修改各个属性的值
adoconnection.open;

#5


connectionstring属性,但最好不要直接把连接串写到程序里,因为这样很容易被人在exe搜到
,写到外面的文件里(加密)或者动态生成,怎么说c/s的程序都不安全,有机会改b/s把
将来发行和升级都容易

#6


楼上 hdjking(永昊)已经说祥细了我就不多说了!
---------------
爱如火,紫如情!
---------------

#7


难道是我考虑的太复杂了吗?还是没有表达清楚?

我知道可以用ADO去配置他的连接向导,可那些都是静态的,那时或得的机器名和其他参数都是自己写程序机器上的参数,当编译后,我还怎么去连客户的电脑?难道只要用我的程序的都要变成我编程时的机器名和其他参数吗?

至于hdjking(永昊)网友的连接我也会的,而且你还没有考虑到如果你使用的是WINDOWS集成登陆的话,这样的连接字符串是连接不上的,我现在问的主要是客户端如何设置ADO字符串连接服务器的SQL 2000数据库?

#8


你的客户端一样要安装sql2000的客户端吧,那这个服务启动的就是你在connectionstring里的Data Source=...   啊,不是吗?

#9


现在是如果客户使用的是WINDOWS集成登陆的话,那个USER ID和PASSWORD都怎么设置呀?

#10


我也有一样的困惑,就是怎么变成一个变量connection。客户机在第一次启动时,把路径、用户、密码赋给该变量就行了,但我也不知该怎么设这个变量

#11


const  GIniFileName = 'init.ini';

procedure Tdatamodule2.DataModuleCreate(Sender: TObject);
begin
  IniFile := TIniFile.Create(GetIniFilePath);
  ser_ip:=IniFile.ReadString('sever_ip', 'sever', '');
  user_name:=inifile.readstring('user_name','default_name','');
  user_pw:=inifile.readstring('user_pw','default_pw','');
  dbname:=inifile.readstring('dbname','database','');
  IniFile.Free;
  ADOConnection1.ConnectionString :=
    'Provider=SQLOLEDB.1;Persist Security Info=false'
    + ';User ID=' + user_name
    + ';Initial Catalog=' + DBName
    + ';Data Source='+ser_ip
    + ';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096'
    + ';Workstation ID='+localip
    + ';Use Encryption for Data=False'
    + ';Tag with column collation when possible=False';
end;

function Tdatamodule2.GetIniFilePath: string;
begin
 FRootPath := ExtractFilePath(Application.ExeName);
  Result := FRootPath + GIniFileName;
end;

#12


上面的方法是读取ini文件里的服务器明、数据库明、用户名、密码信息
然后形成connectionstring

#13


我觉得IORILI 的做法已经很好,推荐!楼主不要给我分!

#14


谢谢 IORILI(沒落的阿咎)的回答,按你的方法基本可以了,谢谢!
现在又来个问题,就是你的方法都是考虑非WINDOWS集成登陆的情况,因为我发现如果SQL 2000使用的WINDOWS集成登陆时,那些用户名和密码都无法使用,这如何解决,而
他的连接字符串替换为了
  INTEGRATED SRECTUTE !1

#15


如果是WINDOWS集成登陆的话,用户名改为WINDOWS登陆名 密码为登陆密码

#16


那样就是不行呀,我不知道是咋回事?

#17


在服务器端,加入用户:客户端用户,密码,然后用户名=客户端用户名 ,密码=密码

#18


就是要在服务器端给客户端访问服务器并且访问数据库的权限,