欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

VS 连接SQL数据库MDF文件

时间:2023-06-23 08:00:40 其他范文 收藏本文 下载本文

这里给大家分享一些VS 连接SQL数据库MDF文件,本文共9篇,供大家参考。

VS 连接SQL数据库MDF文件

篇1:VS 连接SQL数据库MDF文件

SqlConnection con = new SqlConnection;

//con.ConnectionString = “server=.;user id=sa;password=sasa”;//普通的连接

//con.ConnectionString = “Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\数据库名称.mdf;Integrated Security=True;User Instance=True”; //注意哦,这里的mdf文件必须是没有附加上去的,其中的|DataDirectory|是代表项目中的App_Data(数据)目录

con.ConnectionString = “Data Source=.\\;AttachDbFilename=D:\\bs\\App_Data\\ComputerWebsite.mdf;Integrated Security=True;User Instance=false”;

con.Open();

作者“阿贤”

篇2:从MDF文件恢复SqlServer数据库数据库

今天重装机器,竟然忘记备份刚刚在Sql Server下刚刚建好的 robot 数据库 (有一些数据已经加进去了),把C盘格式化了,幸好数据文件MDF因为此前机器C盘空间不足放在别处,于是就开始考虑如何用这个MDF文件来恢复数据库。 找了好些资料,这种情况的还没有,在

今天重装机器,竟然忘记备份刚刚在Sql Server下刚刚建好的robot数据库(有一些数据已经加进去了),把C盘格式化了。幸好数据文件MDF因为此前机器C盘空间不足放在别处,于是就开始考虑如何用这个MDF文件来恢复数据库。

找了好些资料,这种情况的还没有,在delphibbs看到介绍sp_detach_db,sp_attach_single_file_db存储过程的资料,正是我需要的东西,

于是经过实践通过如下步骤终于恢复了robot数据库:

1.新建同名数据库。

2.删除其日志文件robot_Data.LDF,不删除后边的过程执行通不过。

3.把robot数据设置为脱机。

4.在在查询分析器中以超级用户登入,执行以下存储过程,必须以超级用户登入,这是系统级存存处过程。

EXEC sp_detach_db @dbname = 'robot'

EXEC sp_attach_single_file_db @dbname = 'robot', @physname = 'E:WebDemo obot_Data.MDF'

5.把robot数据设置为联机。

6.刷新数据库,表出来了,数据完好

原文转自:www.ltesting.net

篇3:有关Oracle 数据库连接查询SQL语句

内连接(inner join)。

外连接:

全连接(full join)、左连接(left join)、右连接(right join)。

交叉联接(cross join)。

外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行。

1.左连接 (left [outer] join)

左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o left join mt_pb_orgframe f on o.PB_ORGFRAMEID = f.PB_ORGFRAMEID;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid = f.pb_orgframeid(+);

2.右连接 (right [outer] join)

右外连接就是将右表中的所有数据分别与左表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有右表中不符合条件的数据,并在左表相应的列中填上null值。

SQL语句如下:

select * from mt_pb_org o right join mt_pb_orgframe on o.pb_orgframeid = f.pb_orgframeid;

等价语句:

select * from mt_pb_org o,mt_pb_orgframe f where o.pb_orgframeid(+) = f.pb_orgframeid;

3.全外连接 (full [outer] join)

全外连接就是将左表的所有数据分别与右表的每条数据进行连接组合,返回的结果除了内连接的数据外,还有两个表中不符合条件的数据,并在左表或者右表的相应列中填上null值。

SQL语句如下:

select * from mt_pb_org o full join mt_pb_orgframe o.pb_orgframeid = f.pb_orgframeid;

4.交叉连接(cross join)

交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

SQL语句如下:

select * from mt_pb_org o cross join mt_pb_orgframe f;

篇4:如何缩小SQL Server数据库日志文件

问题:数据库实际大小为600MB, 日志文件实际大小为33MB, 但日志文件占用空间为2.8GB!试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小,无论如何,这应该算SQL Server的一个BUG吧。

解决方法:

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可。

-----

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE Marias

-- 要操作的数据库名

SELECT @LogicalFileName = 'Marias_log'

-- 日志文件名

@MaxMinutes = 10,

-- Limit on time allowed to wrap log.

@NewSize = 100

-- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT 'Original Size of ' + db_name + ' LOG is ' +

CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG '

+ db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes >DATEDIFF

(mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (SELECT size

FROM sysfiles WHERE name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) >@NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16)

AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log')

DELETE DummyTrans

SELECT @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

SELECT 'Final Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

篇5:两表连接的SQL语句数据库教程

两表连接的SQL语句:这两种写法哪种好?现在提倡用哪一种呢?

例如:一个二表连接的SQL,有两种写法:

(1)select A.c1,A.c2,B.c1,B.c2

from table1 A,table2 B

where A.id=B.id

(2)select A.c1,A.c2,B.c1,B.c2

from table1 A join table2 B

on A.id=B.id

哪种写法好呢?现在提倡用哪一种?

你喜欢用哪一种?

我习惯用(1)

---这两个哪个好?

其中11楼的回答最为深入,其实这个问题还是有一定的历史原因的,不管你习惯什么样的写法只要知道来龙去脉就不会再被细枝末节来迷惑了。以下观点为个人认识,如有偏差欢迎指正。

简单的说,前者是ansi sql 86标准后者是ansi sql 92标准(*****) ,这个观点最容易被人接受。

什么是ansi?美国国家标准局,iso的重要成员之一,19就有了。

什么是ansi sql?就是ansi注意到了sql的生产力,于是规范化了一下。

什么是sql?他是ibm发明的,oracle发扬广大的一门语言。

为什么是两家公司?。

70年代初因为ibm内部各方利益斗争激烈,导致某大牛的研究成果只能以论文方式发表。

70年代末某小公司把此技术用在商业领域就成了oracle,直到n年后ibm db2才出来。

所以,sql不是ansi 发明的,ansi 标准也不能通吃所有数据库平台。

比如下面这个是什么数据库的语法?反正ansi 标准在他那里是报错的。

select * from (a inner join b on a.id=b.id) inner join c on a.id=c.id

那么在ansi86之前的数据库有哪些?oracle和db2是肯定的了,

另外还有一些当时的小角色:Informix,dbase系列等。

而sybase的数据库和SQLServer是86年之后出来的,而前面那个奇怪的join语法的access是90后的。

古老的sqlserver和oracle我都没有用过,反正在用oracle8i时还不支持ansi 92的inner join,他是生的。一直到本世纪发布的oacle9i 才改了过来。用多了t-sql的人会问 left join咋办,where a.id=b.id(+) 就可以了,人家没那么笨的,t-sql以前还有*=这样的表示。

那么这么看貌似ansi的规范力度不够?其实不是,国际标准化也不可能一刀切,在ansi92 当中定义了4个级别,n多条款。大意就是大家符合入门级就行了,其他高级别仅供参考,甚至iso根本不会验证其他级别..而诸如inner join和left join之类的都是过渡级的,濉

所以我前面打了5个星星的那句话并不是完全正确的,正确的应该是

前者符合ansi 86 标准和ansi 92入门级标准,后者符合ansi92 过渡级标准。

不是oracle8i不符合ansi92,而是没有符合ansi92的高级别规范,而完全实现高级别标准的数据库系统是没有的。

早在oracle7就已经完全符合ansi92了,当然是指入门级,而且他就是ansi92 的模版范例。

--回到上面的话题,这两个哪个好?

性能当然完全一样,区别只是习惯和喜好,但也因为标准级别不同而具有不同的风险。

如果想要优雅而易于维护且不容易写错的代码,当然用高标准的第二种方法。

如果必要考虑风险这个因素,比如涉及到多种平台的迁移或者整合,你应该用第一种,起码在两个表的情况下他还是比较安全的。

----

顺带提一句,ansi标准一直在修订:具体有多少版本就不列举了,我们得到的好处自然是多多的,比如递归、对象、数组、xml等等在各主流数据库的新版本中都陆续实现了

篇6:教你如何缩小SQL SERVER日志文件数据库教程

前几天也碰到日志文件过大的问题,数据库实际大小为600M, 日志文件实际大小为33M, 但日志文件占用空间为2.8G!!!

试了多种方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都没办法将文件缩小,无论如何,这应该算SQL SERVER的一个BUG吧。

后来找到下面的代码,就可以将日志文件缩小到自己想要的大小了。把代码COPY到查询分析器里,,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可(我已经用过多次了)

-----

SET NOCOUNT ON

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE Marias -- 要操作的数据库名

SELECT @LogicalFileName = 'Marias_log', -- 日志文件名

@MaxMinutes = 10, -- Limit on time allowed to wrap log.

@NewSize = 100 -- 你想设定的日志文件的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT 'Original Size of ' + db_name + ' LOG is ' +

CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes >DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

AND (@OriginalSize * 8 /1024) >@NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter <@OriginalSize / 16) AND (@Counter <50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log')

DELETE DummyTrans

SELECT @Counter = @Counter + 1

END

EXEC (@TruncLog)

END

SELECT 'Final Size of ' + db_name() + ' LOG is ' +

CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

篇7:SQL Server连接失败错误及解决[2]数据库教程

server|错误|解决

通过以上几个方面的检查,错误 1 发生的原因基本上可以被排除,

SQL Server连接失败错误及解决[2]数据库教程

。下面我们再详细描述如何来解决错误 2。

当用户尝试在查询分析器里面使用sa来连接SQL Server,或者在企业管理器里面使用sa来新建一个SQL Server注册时,经常会遇到如图 2 所示的错误信息。该错误产生的原因是由于SQL Server使用了“仅 Windows”的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接。解决方法如下所示:

1、在服务器端使用企业管理器,并且选择“使用 Windows 身份验证”连接上 SQL Server;

2、展开“SQL Server组”,鼠标右键点击SQL Server服务器的名称,选择“属性”,再选择“安全性”选项卡;

3、在“身份验证”下,选择“SQL Server和 Windows ”。

4、重新启动SQL Server服务。

在以上解决方法中,如果在第 1 步中使用“使用 Windows 身份验证”连接 SQL Server 失败,那么我们将遇到一个两难的境地:首先,服务器只允许了 Windows 的身份验证;其次,即使使用了 Windows 身份验证仍然无法连接上服务器。这种情形被形象地称之为“自己把自己锁在了门外”,因为无论用何种方式,用户均无法使用进行连接。实际上,我们可以通过修改一个注册表键值来将身份验证方式改为 SQL Server 和 Windows 混合验证,步骤如下所示:

1、点击“开始”-“运行”,输入regedit,回车进入注册表编辑器;

2、依次展开注册表项,浏览到以下注册表键:

[HKEY_LOCAL_MACHINE OFTWARE\Microsoft\MSSQLServer\MSSQLServer]

3、在屏幕右方找到名称“LoginMode”,双击编辑双字节值;

4、将原值从1改为2,点击“确定”;

5、关闭注册表编辑器;

6、重新启动SQL Server服务。

此时,用户可以成功地使用sa在企业管理器中新建SQL Server注册,但是仍然无法使用Windows身份验证模式来连接SQL Server。这是因为在 SQL Server 中有两个缺省的登录帐户:BUILTIN\Administrators 以及 <机器名>\Administrator 被删除。要恢复这两个帐户,可以使用以下的方法:

1、打开企业管理器,展开服务器组,然后展开服务器;

2、展开“安全性”,右击“登录”,然后单击“新建登录”;

3、在“名称”框中,输入 BUILTIN\Administrators;

4、在“服务器角色”选项卡中,选择“System Administrators” ;

5、点击“确定”退出;

6、使用同样方法添加 <机器名>\Administrator 登录。

以下注册表键

HKEY_LOCAL_MACHINE OFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode

的值决定了SQL Server将采取何种身份验证模式。该值为1,表示使用Windows 身份验证模式;该值为2,表示使用混合模式(Windows 身份验证和 SQL Server 身份验证)。

看完如何解决前两个错误的方法之后,让我们来看一下如图 3 所示的第三个错误。

如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,不过是由于连接的时间大于允许的时间而导致出错。这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,并且是慢速连接时,有可能会导致以上的超时错误。有些情况下,由于局域网的网络问题,也会导致这样的错误。

要解决这样的错误,可以修改客户端的连接超时设置。默认情况下,通过企业管理器注册另外一台SQL Server的超时设置是 4 秒,而查询分析器是 15 秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因)。具体步骤为:

1、在企业管理器中,选择菜单上的“工具”,再选择“选项”;

2、在弹出的“SQL Server企业管理器属性”窗口中,点击“高级”选项卡;

3、在“连接设置”下的“登录超时(秒)”右边的框中输入一个比较大的数字,如 20。

查询分析器中也可以在同样位置进行设置。

二、应用程序连接失败

以上的三种错误信息都是发生在 SQL Server 自带的客户端工具中,在应用程序中我们也会遇到类似的错误信息,例如:

Microsoft OLE DB Provider for SQL Server (0x80004005)

[DBNETLIB][ConnectionOpen (Connect()).]Specified SQL server not found.

Microsoft OLE DB Provider for SQL Server (0x80004005)

用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联。

Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'.

[Microsoft][ODBC SQL Server Driver]超时已过期.

首先,让我们来详细看以下的示意图来了解一下使用 ODBC 和使用 OLE DB 连接 SQL Server 有什么不同之处,

从上图中,我们可以看出在实际使用中,应用程序创建和使用各种 ADO 对象,ADO 对象框架调用享用的 OLE DB 提供者。为了访问 SQL Server 数据库,OLE DB 提供了两种不同的方法:用于 SQL Server 的 OLE DB 提供者以及用于 ODBC 的 OLE DB 提供者。这两种不同的方法对应于两种不同的连接字符串,标准的连接字符串写法如下所示:

1、使用用于 SQL Server 的 OLE DB 提供者:

使用 SQL Server 身份验证:

oConn.Open “Provider=sqloledb;” & _

“Data Source=myServerName;” & _

“Initial Catalog=myDatabaseName;” & _

“User Id=myUsername;” & _

“Password=myPassword”

使用 Windows 身份验证(信任连接):

oConn.Open “Provider=sqloledb;” & _

“Data Source=myServerName;” & _

“Initial Catalog=myDatabaseName;” & _

“Integrated Security=SSPI”

2、使用用于 ODBC 的 OLE DB 提供者(不使用 ODBC 数据源):

使用 SQL Server 身份验证:

oConn.Open “Driver={SQL Server};” & _

“Server=MyServerName;” & _

“Database=myDatabaseName;” & _

“Uid=myUsername;” & _

“Pwd=myPassword”

使用 Windows 身份验证(信任连接):

oConn.Open “Driver={SQL Server};” & _

“Server=MyServerName;” & _

“Database=myDatabaseName;” & _

“Trusted_Connection=yes”

3、使用用于 ODBC 的 OLE DB 提供者(使用 ODBC 数据源):

oConn.Open “DSN=mySystemDSN;” & _

“Uid=myUsername;” & _

“Pwd=myPassword”

如果遇到连接失败的情况,我们只要按照一中所示的方法,结合程序中的连接字符串进行检查,基本都能得到解决。另外,还有以下几个要注意的地方:

1、配置 ODBC 数据源时,点击“客户端”配置选项可以让我们指定连接使用的网络库、端口号等属性,如下图所示:

2、如果遇到连接超时的错误,我们可以在程序中修改 Connection 对象的超时设置,再打开该连接。例如:

<%

Set Conn = Server.CreateObject(“ADODB.Connection”)

DSNtest=“DRIVER={SQL Server};SERVER=ServerName;UID=USER;PWD=password;DATABASE=mydatabase”

Conn. Properties(“Connect Timeout”) = 15 '以秒为单位

Conn.open DSNtest

%>

3、如果遇到查询超时的错误,我们可以在程序中修改 Recordset 对象的超时设置,再打开结果集。例如:

Dim cn As New ADODB.Connection

Dim rs As ADODB.Recordset

. . .

cmd1 = txtQuery.Text

Set rs = New ADODB.Recordset

rs.Properties(“Command Time Out”) = 300

'同样以秒为单位,如果设置为 0 表示无限制

rs.Open cmd1, cn

rs.MoveFirst

. . .

三、小结

本文针对大部分用户在使用 SQL Server 过程中常见的连接失败的错误,重点讨论了在使用 SQL Server 客户端工具以及用户开发的应用程序两种情况下,如何诊断并解决连接失败的错误。看过本文以后,相信每一个读者都会对 SQL Server 的连接工作原理、身份验证方式以及应用程序开发等有一个较为全面而深入的连接。本文中所有的测试或者示例均在 Windows Advanced Server + SQL Server 2000 企业版上通过。

篇8:恢复整个SQL server数据库还是只恢复错误文件组

这有一个具体例子:如果你有一个单个的出现问题的文件,这个文件有50MB大小,而你的整个数据库 运行着大约有几十亿的字节,这样的话如果能恢复单个失败文件的话就显的非常有意义。这样的事情发生 的一个情景是当文件或者文件组在单独的驱动器上,而驱动器出现了问题。通常,仅仅恢复单个文件或者 文件组会使总的停止时间缩短,因为它明显减少了需要恢复的总的数据量。

现在,为什么你不选择这么做呢?这有一些原因:

你需要有事务日志备份。如果你想从备份中恢复一个文件或者文件组,你同时也需要恢复与它们一起 创建的事务记录备份,从而使整个数据库能够处于一个一致的状态。在SQL Server 2000 和 中,你 需要使用Full Recovery或者Bulk-Logged Recovery模式(也就是说不是Simple Recovery)来使它成为可能 。我应该指出SQL Server的实现者们并没有尽他们的努力来完成判断从上一次备份一个文件或者文件组是 否已经被修改了的功能。如果没有被改变,那么事务记录是没有什么必要的。但是,总的来说,还是需要 事务记录备份的,如果你现在还没有一个备份事务记录的恢复或者备份计划,那么现在就创建一个吧。

在要恢复的文件或者文件组中的表格与数据库中其他的表格之间的数据不一致性成为需要考虑的一个 问题。如果你有相互之间依赖的表格,并且这些表格没有被存储在相同的物理文件或者文件组中(这有时 是不可避免的),仅仅恢复一个文件或者文件组可能会导致它与数据库其他部分不同步。例如,你有一个 表格被另一个表格用JOIN关联,并且这个JOIN使用了一个视图和存储过程,这时仅仅恢复一个而不恢复另 一个可能会有问题。

当你在数据库中只有一个文件组。如果你的所有的数据仅仅存储在一个文件或者文件组中,并且它又 不是一个特别大的数据库时,会发生什么事情呢?那时恢复一个文件或者文件组的努力就变的没有什么意 义了,

选择性的恢复文件或者文件组的主要原因是当恢复数据库很大,以至于恢复整个数据库的代价很大的 时候,使得对数据库的局部损坏的恢复成为可能。在一个非常小的轻量级的数据库里,和nonproduction 系统中,或者数据库中只有一个文件组的时候,实现选择性的恢复功能就显的没有太大的意义,因为这时 恢复整个数据库和恢复单个的文件或者文件组没有什么太大的区别。

我发现大多数时候当人们想使用文件或者文件组恢复时,他们实际上是想把一个特定的表格恢复到先 前的一个点的时刻的状态。这在SQL Server中不是一个显式支特的特性,但是存在这么做的方法,倘若你 不介意由于采用这种方法而需要手工的来管理可能产生的不一致(就想上面#2所说的)。如果你手边就有一 个数据库备份的话,你可以简单的恢复那个备份,仅仅把它看作是相同数据库的不同名字的实例。接着, 通过事务记录把数据库向前滚动到指定的点(如果需要这样做的话),然后手工的把当前的数据库拷贝到目 标数据库中。

我自己已经实验过这种方法几次,但是仅仅只有一个表格没有与相同数据库中的其他的表格有很大的 关联。我的例子涉及了一个包含了留言版系统的聊天网站。我不得不经常恢复一些在留言版上被意外删除 的消息,这些是自包含的:从留言版表格的数据产生的唯一的JOINs是外部的而不是内部的。因此,我可 以随意的更新表格因为我知道我不会让那个表格与其他表格不同步的。

在SQL Server 2000和它更高的版本中,当你做一个RESTORE操作的时候你可以使用PARTIAL子句,从而 使仅仅需要的文件组数据被恢复。这作为一个时间和空间上的节约开销的措施是非常有用的:你不需要进 行繁重的恢复所有数据的工作,而仅仅只需要对一个表格进行操作。而且很可能也没有足够的空间来进行 完全的恢复操作。

篇9:Windows和Linux系统下perl连接SQL Server数据库的方法

这篇文章主要介绍了Windows和Linux系统下perl连接SQL Server数据库的方法,本文详细的讲解了Windows和Linux系统中perl如何连接Microsoft SQL Server数据库,需要的朋友可以参考下

本文将提供一些perl连接Microsoft SQL Server数据库的实例,perl脚本运行在Windows和Linux平台。

Windows平台

如果在Windows平台下运行perl脚本,建议使用依赖DBI的两个模块包,提供标准的数据库接口模块。

DBD::ODBC

DBD::ADO

使用DBD::ODBC

如果选用DBD::ODBC,下面的实例代码将展示如何连接到SQL Server数据库:

代码如下:

use DBI;

# DBD::ODBC

my $dsn = ‘DBI:ODBC:Driver={SQL Server}‘;

my $host = ‘10.0.0.1,1433‘;

my $database = ‘my_database‘;

my $user = ‘sa‘;

my $auth = ‘s3cr3t‘;

# Connect via DBD::ODBC by specifying the DSN dynamically.

my $dbh = DBI->connect(“$dsn;Server=$host;Database=$database”,

$user,

$auth,

{ RaiseError =>1, AutoCommit =>1}

) || die “Database connection not made: $DBI::errstr”;

#Prepare a SQL statement my $sql = “SELECT id, name, phone_number FROM employees ”;

my $sth = $dbh->prepare( $sql );

#Execute the statement

$sth->execute();

my( $id, $name, $phone_number );

# Bind the results to the local variables

$sth->bind_columns( undef, \$id, \$name, \$phone_number );

#Retrieve values from the result set

while( $sth->fetch() ) {

print “$id, $name, $phone_number\n”;

}

#Close the connection

$sth->finish();

$dbh->disconnect();

你还可以使用预先设置的一个系统DSN来连接。要建立一个系统DSN,可以这样访问控制面板->管理工具->数据源。

使用系统DSN连接,需要更改连接字符串。如下所示:

代码如下:

# Connect via DBD::ODBC using a System DSN

my $dbh = DBI->connect(“dbi:ODBC:my_system_dsn”,

$user,

$auth,

{

RaiseError =>1,

AutoCommit =>1

}

) || die “Database connection not made: $DBI::errstr”;

使用DBD::ADO

如果选择DBD::ADO模块,下面的实例展示如何连接到SQL Server数据库。

代码如下:

use DBI;

my $host = ‘10.0.0.1,1433‘;

my $database = ‘my_database‘;

my $user = ‘sa‘;

my $auth = ‘s3cr3t‘;

# DBD::ADO

$dsn = “Provider=sqloledb;Trusted Connection=yes;”;

$dsn .= “Server=$host;Database=$database”;

my $dbh = DBI->connect(“dbi:ADO:$dsn”,

$user,

$auth,

{ RaiseError =>1, AutoCommit =>1}

) || die “Database connection not made: $DBI::errstr”;

#Prepare a SQL statement

my $sql = “SELECT id, name, phone_number FROM employees ”; my $sth = $dbh->prepare( $sql );

#Execute the statement

$sth->execute();

my( $id, $name, $phone_number );

# Bind the results to the local variables

$sth->bind_columns( undef, \$id, \$name, \$phone_number );

#Retrieve values from the result set

while( $sth->fetch() ) {

print “$id, $name, $phone_number\n”;

}

#Close the connection

$sth->finish();

$dbh->disconnect();

Linux平台

如果是在Linux平台下运行perl脚本,连接SQL Server数据库需要使用到DBD::Sybase包,

安装SQL Server支持库

Sybase DBD包依赖FreeTDS驱动程序。

FreeTDS下载地址:www.freetds.org

安装FreeTDS驱动的说明文档参见:www.freetds.org/userguide/config.htm

该驱动没有使用到ODBC.

配置数据源

修改freetds.conf文件包括SQL Server数据库信息,如下所示:

代码如下:

[SS_MY_DB]

host = 10.0.0.1 # or host name port = 1433

tds version = 7.0

安装Sybase DBD模块

该模块文档参见:search.cpan.org/~mewp/DBD-Sybase/Sybase.pm

此外,需要将sybase环境变量应设置为FreeTDS安装路径,export SYBASE=/usr/local/freetds

使用Sybase DBI和SQL Server DSN实例

代码如下:

# load the DBI module

use DBI;

use DBD::Sybase;

my $database=“my_database”;

my $user=“sa”;

my $auth=“s3cr3t”;

BEGIN

{

$ENV{SYBASE} = “/usr/local”;

}

# Connect to the SQL Server Database

my $dbh = DBI->connect(“dbi:Sybase:server=ss_my_db;database=$database”,

$user,

$auth

{RaiseError =>1, AutoCommit =>1}

) || die “Database connection not made: $DBI::errstr”;

#Prepare a SQL statement

my $sql = “SELECT id, name, phone_number FROM employees”;

my $sth = $dbh->prepare( $sql );

#Execute the statement

$sth->execute();

my( $id, $name, $phone_number );

# Bind the results to the local variables

$sth->bind_columns( undef, \$id, \$name, \$phone_number );

#Retrieve values from the result set

while( $sth->fetch() ) { print “$name, $title, $phone\n”;

}

#Close the connection

$sth->finish();

undef $sth; # This fixes a segfault bug with certain versions of DBD::Sybase

$dbh->disconnect();

Perl连接Oracle数据库

查找bad sql的方法数据库教程

日期时间转换为日期的SQL语句数据库教程

告诉你使用SQL Server 的3个理由数据库教程

编写安全的SQL Server扩展存储过程数据库教程

用函数简化你的字符串连接语句数据库教程

创建访问非Oracle文件的外部表格数据库

临时表在Oracle数据库与SQL Server数据库中的异同

python中常用的各种数据库操作模块和连接实例

我VS牙齿

《VS 连接SQL数据库MDF文件(共9篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档