将Delphi连接到SQL数据库

时间:2012-11-20 19:27:08

标签: sql-server delphi sql-server-2008r2-express

我正在使用Microsoft SQL Server R2 Express来创建数据库。

当我尝试使用delphi连接到数据库时,我必须使用此连接字符串:

ADOConnection1.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=db_formation;Data Source=EVILKID-pc\evilkid;';

其中“EVILKID-PC \ evilkid”是我的电脑名称, enter image description here

你可能看起来这只适用于我的电脑。我该怎么做才能连接到localhost?我已经尝试将“数据源”更改为“localhost”,但它无法连接,我会得到:

[DBNETLIN][ConnectionOpen(Connect()).]SQL Server does not exist or access denied

知道问题出在哪里?

3 个答案:

答案 0 :(得分:4)

即使您的实例在localhost上,它仍然是您需要在连接字符串中指定的命名实例:

ADOConnection1.ConnectionString := '... Data Source=localhost\evilkid;';

答案 1 :(得分:1)

你可以通过各种方式解决这个问题。正如迈克尔所说,使用配置文件。其他可能的方法是使用DSN访问数据库。如果它始终是localhost / machinename,您可以使用任意数量的方法检索计算机名称。我在一些较旧的项目中使用TtvAPIThing,JEDI有一个系统信息组件,可以更轻松地访问它们。

答案 2 :(得分:1)

我会在PC上的本地应用程序数据路径中创建一个UDL文件(Connection.UDL),并让应用程序中的连接字符串使用它

Var
  plainAppName : String;
  appDataPath : String;

Begin
  plainAppName := ChangeFileExt(ExtractFilePath(ParamStr(0)),'.EXE','');
  appDataPath := IncludeTrailingBackslash(GetSpecialFolderLocation(CSIDL_APPDATA))+plainAppName+'\';
  ADOConnection.Connectionstring := 'FILE NAME = '+appDataPath+'Connection.UDL';

Connection.UDL包含

[oledb]
; Everything after this line is an OLE DB initstring
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=test;Data Source=YourPC\InstanceName
事实上,它可能是空的。但是,您(或客户)双击该文件,并打开oleDB连接对话框。现在设置服务器,实例,登录凭证,测试连接并保存。

进行。

你的应用程序将打开文件(好吧,ADOConnection会),你很安全。

另一种更通用的方法是简单地将服务器pc的IP /名称存储在INI文件中,并将其替换为代码

CONST
  adoStr = 'Provider=SQLOLEDB.1;Integrated Security=SSPI;'
          +'Persist Security Info=False;Initial Catalog=test;'
          +'Data Source=%s';

ADOConnection.ConnectionString := Format(adoStr,[TheIPOrNameOfThePC]);
...