范文控,您身边的好帮手!
当前位置:范文控 毕业论文内容页

MFC连接SQLServer数据库

2023-08-05 15:23:54 毕业论文 访问手机版

【简介】感谢网友“wutianjian”参与投稿,下面就是小编给大家带来的MFC连接SQLServer数据库(共9篇),希望大家喜欢阅读!

篇1:MFC连接SQLServer数据库

其步骤一般分为:

(1) 引入ADO动态库文件

(2) 初始化COM环境

(3) 连接数据库操作数据表

说明:本数据库使用SQLServer2005制作,名字为“student”,内含一个表,命名为“stud”。

建表语句

create table stud

(

num varchar(7),

name nvarchar(20) not null,

gender nchar(2) default '男' check(gender in('男','女')),

dept nvarchar(20) not null

)

插入一些数据

insert into stud values('0147256','test','男','计算机系');

进行疯狂复制,多添加一些数据

insert into stud select * from stud;

本例中创建的数据源名字为'test'

需要添加数据源

在stdafx.h添加以下代码引入ADO动态库文件

#import “C:\\Program Files\\CommonFiles\\System\\ado\\msado15.dll” no_namespace\\rename(“EOF”,“adoEOF”)rename(“BOF”,“adoBOF”)

初始化COM环境

::CoInitialize(NULL); //在app类中的InitInstance函数中添加

::CoUninitialize; //在app类中的InitInstance函数的最后(return之前)添加,释放COM环境

首先先在dlg头文件中先声明这两个智能指针,通过这些指针可以很容易的创建和删除ADO对象。

_ConnectionPtrm_pConnection;

_RecordsetPtrm_pRecordset;

接下来在dlg类中添加函数void OnInitADOConn()

void CMy1Dlg::OnInitADOConn()

{

::CoInitialize(NULL); //初始化COM环境

try

{

//创建连接对象实例

m_pConnection.CreateInstance(“ADODB.Connection”);

CString strConnect;

//注意,我这里写的连接字符串是通过以下步骤的得到的:

//1、新建一个文件,名字任意取,后缀名必须为udl(如何hello.udl)

//2、双击hello.udl文件,进入数据连接属性面板,填写好数据源(选择自己创建的数据源名字的)

//3、再以记事本方式打开,第三行的数据就是连接字符

strConnect=“Provider=MSDASQL.1;Persist Security Info=False;User ID=sa;Data Source=test;Password=*******”;

//使用Open方法连接数据库

m_pConnection->Open((_bstr_t)strConnect,“”,“”,adModeUnknown);

}

catch(_com_error e)

{

AfxMessageBox(e.Description());

}

}

在dlg类中在添加void ExitConnect()函数

void CMy1Dlg::ExitConnect()

{

//关闭记录集和连接

if(m_pRecordset!=NULL)

m_pRecordset->Close();

m_pConnection->Close();

}

在dlg类的OnInitDialog函数中添加如下代码,设置列表视图的风格和标题(写在最后)

m_Grid.SetExtendedStyle(LVS_EX_FLATSB

|LVS_EX_FULLROWSELECT

|LVS_EX_HEADERDRAGDROP

|LVS_EX_ONECLICKACTIVATE

|LVS_EX_GRIDLINES);

m_Grid.InsertColumn(0,“编号”,LVCFMT_LEFT,110,0);

m_Grid.InsertColumn(1,“姓名”,LVCFMT_LEFT,110,1);

m_Grid.InsertColumn(2,“性别”,LVCFMT_LEFT,110,2);

m_Grid.InsertColumn(3,“学历”,LVCFMT_LEFT,110,3);

AddToGrid();

在dlg类中添加void AddToGrid()函数

void CMy1Dlg::AddToGrid()

{

//连接数据库

OnInitADOConn();

//设置查询字符串

_bstr_tbstrSQL = “select * from stud”;

//创建记录集指针对象实例

m_pRecordset.CreateInstance(__uuidof(Recordset));

//打开记录集

m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,

adLockOptimistic,adCmdText);

int i=0;

while(!m_pRecordset->adoEOF)

{

m_Grid.InsertItem(i,“”);

m_Grid.SetItemText(i,0,(char*)(_bstr_t)m_pRecordset->GetCollect(“num”));

m_Grid.SetItemText(i,1,(char*)(_bstr_t)m_pRecordset->GetCollect(“sex”));

m_Grid.SetItemText(i,2,(char*)(_bstr_t)m_pRecordset->GetCollect(“gender”));

m_Grid.SetItemText(i,3,(char*)(_bstr_t)m_pRecordset->GetCollect(“dept”));

//两种方式均可

/*

m_Grid.SetItemText(i,0,(_bstr_t)m_pRecordset->GetCollect(_variant_t((long)0)));

m_Grid.SetItemText(i,1,(_bstr_t)m_pRecordset->GetCollect(_variant_t((long)1)));

m_Grid.SetItemText(i,2,(_bstr_t)m_pRecordset->GetCollect(_variant_t((long)2)));

m_Grid.SetItemText(i,3,(_bstr_t)m_pRecordset->GetCollect(_variant_t((long)3)));

*/

i++;

//将记录集指针移动到下一条记录

m_pRecordset->MoveNext();

}

//断开数据库连接

ExitConnect();

}

接下来为四个edit控件和一个list constrol控件关联变量,在资源中右键点击选择classwizar里的Member variables,分别为它们设置变量为m_ID,m_Name,m_Sex,m_Culture,m_Grid.在dlg类的头文件部分自动会生成

CString m_ID;

CString m_Name;

CString m_Sex;

CString m_Culture;

CListCtrl m_Grid;

Dlg类构造函数中

m_ID = _T(“”);

m_Name = _T(“”);

篇2:VB6.0与SQLServer――有源数据库连接

VB6.0中数据访问接口有三种:ActiveX数据库对象(ADO)、远程数据对象(RDO)和数据访问对象(DAO),ADO(ActiveX Data Objects)是用于存取数据源的COM组件是Microsoft数据库应用程序开发的接口,是建立在OLEDB之上的高层数据库访问技术。它封装了OLEDB所提供的接口,比起OLEDB的提供者,ADO接口可以使程序员在更高级别上进行数据交互。它提供了统一数据库访问方式OLEDB(Object Linking and Embedding Database)的一个中间层。VB6.0与SQL Server建立连接有两种方法:有源数据库连接和无源数据库连接,区别他们看是否使用了DSN连接。无源数据库连接是不需要配置ODBC数据源,利用ADO就可以通过代码编写的。

下面主要介绍一下有源数据库连接。首先要注册数据源名称(DSN),通过配置ODBC环境进行数据源注册。

数据源分三类:

(1)用户DSN:只有创建数据源的用户才可以使用他们自己创建的数据源而且只能在当前计算机上使用。

(2)系统DSN:任何使用计算机的用户和程序都可以使用,

(3)文件DSN:除了具有系统DSN的功能外,还能被其他用户在其他计算机上使用。

首先,我们选择创建文件DSN,并单击添加。

www.2cto.com

其次,在创建新数据源中选择SQL Server驱动程序。

第三步,输入想要保存此链接的文件数据源的名称。

第四步,选择服务器

然后,设置登录认证

如下选项可以根据需要选择

最后,进行测试数据源。

显示成功,点击确定,文件DSN设置成功!

ODBC(Open Database Connectivity)开放数据库互联,是一种接口规范。利用ODBC可以在应用程序中同时访问多个数据库系统,ODBC最大优点是能以统一的方式处理所有的数据库。

作者 康立贤

篇3:SQLServer数据库学习笔记

1,exists和in的理解(参考/article/28922.htm)

exists:如果子查询中包括某一行,那么就为TRUE

in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE

exists总是搞得不太明白

select 。。。from。。。where 。。。

where就相当于一个判断条件,只有where后面的表达式运算结果为TRUE,前面的才能select出来

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

1: SELECT c.CustomerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE o.CustomerID = cu.CustomerID)

像这样的EXISTS子查询中的SELECT什么根本不重要,因为子查询只是检查这个表中有没有满足WHERE后条件的行, 有就返回TRUE,没有就FALSE,所以很多EXISTS后都是SELECT的*

一行行的去判定,EXISTS返回的是TRUE,就是存在,则把这行的相关信息输出

1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 学号=xs.学号 and 课程号=kc.课程号 )

分析下上面的查询语句:

把最外层的xs表里的记录一行一行的同中层一行一的笛卡尔乘积后拿到里面去检验

在最里层,如果xs_kc表里的某行有拿来检验的这行的学号,同时有中层拿来检验的课程号

就返回TRUE,说明这个这个学生选了这门课

中层如果某门课程没有收到返回的TRUE信息,说明这个名字和课程的搭配在xs_kc表中没有,或者说中层select出来的是没有被这个学生选择的课程信息,如果有这样的课程,就向最外层返回个TRUE

最外层在返回信息上加了not,即最外层找的是这样的一种学生:

他选择了所有的课程

最外层一行行的去检测,如果他满足这个条件,就输出他的姓名且只输出一次

我这是一层层的分析,还有么有什么别的办法?

2,select。。。into @。。。

和select @。。。 = 。。。应该是相同的吧

3,用AS为列重命名似乎比=更好点,和赋值区分开

4,用compute汇总的时候,如果是根据某列汇总的,先要order by此列,然后在compute相应信息,最后by此列

group或者compute的时候,如果by了某列,select里都要出现相同的列

区别是group的聚合函数在select行中(称为选择列表),而compute的聚合函数在compute行中,同时compute可以不带by,对所有行汇总

[SQLServer数据库学习笔记]

篇4:无法打开SQLServer的连接

机房收费系统重构版的登陆敲了好几天了,总算把登陆窗体敲完了,代码调试的差不多了,问题就处在数据库了,

SQL Server配置管理里的SQL Server服务都启动了,但是还是报这个错误:在与 SQL Server建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。(provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接)

压根就没有连接上数据库,郁闷中,郁闷解决不了问题,查呗。终于找到了解决办法。

解决步骤:

第一步:启动SQL Server网络配置里面的TCP/I,并且把IP地址改成自己的IP地址,TCP端口为1433.

第二步:打开SQL Server,右键----->方面,

更改服务器配置和外围应用配置器里面的内容。如图:

服务器配置里面的RemoteAccessEnabled、RemoteDaEnabled还有RemoteProcTransEnabled全部设置为True

外围应用配置器里面的RemoteDaEnabled设置为True

接下来就是在防火墙中创建创建例外了。接下来就是在防火墙中创建创建例外了,打开控制面板—系统和安全—Windows控制面板—允许的程序。

找到自己SQLServer.exe所在的文件目录进行添加(这里的路径根据每个人安装的不同和不同,只要找到就可以)

添加完成。

最后再重亲启动SQL Server配置管理里的SQL Server服务。

再来看看我的系统能不能连上数据库了。

没有问题了,成功登陆。

一个登陆,折腾了好几天,从三层到七层,使用了外观模式、抽象工厂、反射、配置文件、存储过程还有SqlHepler等全都尝试了一遍。大大小小的问题有很多,但是总是折腾完了。后面的各种功能还是对这些内容更深入的理解,继续学习。

篇5:sqlserver 如何创建分区表数据库教程

server|sqlserver|创建

该文详细介绍实现分区表的过程以及有助于完成此过程的功能,

sqlserver 2005 如何创建分区表数据库教程

。逻辑流程如下:

图:创建分区表或索引的步骤

确定是否应为对象分区

虽然分区可以带来众多的好处,但也增加了实现对象的管理费用和复杂性,这可能是得不偿失的。尤其是,您可能不需要为较小的表或目前满足性能和维护要求的表分区。前面提到的销售方案使用分区减轻了移动行和数据的负担,但在决定是否实现分区时,您应考虑您的方案是否存在这种负担。

确定分区键和分区数

如果您正在尝试改善大型数据子集的性能和可管理性,并且已经定义了访问模式,则可以使用范围分区减少数据争用的情况,同时减少只读数据不需要分区时的维护工作。要确定分区数,应先评估您的数据中是否存在逻辑分组和模式。如果您通常一次只处理这些已定义子集中的少数几个,则应定义范围以隔离查询,使其只处理相应的数据(即,只处理特定的分区)。

确定是否应使用多个文件组

为了有助于优化性能和维护,应使用文件组分离数据。文件组的数目一定程度上由硬件资源决定:一般情况下,文件组数最好与分区数相同,并且这些文件组通常位于不同的磁盘上。但是,这主要适用于打算对整个数据集进行分析的系统。如果您有多个 CPU,SQL Server 则可以并行处理多个分区,从而大大缩短处理大量复杂报表和分析的总体时间。这种情况下,可以获得并行处理以及在分区表中移入和移出分区的好处。

创建文件组

如果需要为多个文件放置一个分区表以获得更好的 I/O平衡,则至少需要创建一个文件组。文件组可以由一个或多个文件构成,而每个分区必须映射到一个文件组。一个文件组可以由多个分区使用,但是为了更好地管理数据(例如,为了获得更精确的备份控制),应该对分区表进行设计,以便只有相关数据或逻辑分组的数据位于同一个文件组中。使用 ALTER DATABASE,可以添加逻辑文件组名,然后添加文件。要为 AdventureWorks 数据库创建名为 Q3 的文件组,请按以下方式使用 ALTER DATABASE:

ALTER DATABASE AdventureWorks ADD FILEGROUP [2003Q3]

创建文件组后,使用 ALTER DATABASE 将文件添加到该文件组中。

ALTER DATABASE AdventureWorks

ADD FILE

(NAME = N'2003Q3',

FILENAME = N'C:\\AdventureWorks\\2003Q3.ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB)

TO FILEGROUP [2003Q3]

通过在 CREATE TABLE 的 ON 子句中指定一个文件组,可以为文件创建一个表。但是,如果表未分区,则不能为多个文件组创建一个表。要为一个文件组创建表,请使用 CREATE TABLE 的 ON 子句。要创建分区表,必须先确定分区的功能机制。进行分区的标准以分区函数的形式从逻辑上与表相分离。此分区函数作为独立于表的定义存在,而这种物理分离将起到帮助作用,因为多个对象都可以使用该分区函数。因此,为表分区的第一步是创建分区函数。

为范围分区创建分区函数

范围分区必须使用边界条件进行定义。而且,即使通过 CHECK 约束对表进行了限制,也不能消除该范围任一边界的值。为了允许定期将数据移入该表,需要创建最后一个空分区。

在范围分区中,首先定义边界点:如果存在五个分区,则定义四个边界点值,并指定每个值是第一个分区的上边界 (LEFT) 还是第二个分区的下边界 (RIGHT)。根据 LEFT 或 RIGHT 指定,始终有一个空分区,因为该分区没有明确定义的边界点。

具体来讲,如果分区函数的第一个值(或边界条件)是 '1001',则边界分区中的值将是:

对于 LEFT

第一个分区是所有小于或等于 '20001001' 的数据

第二个分区是所有大于 '20001001' 的数据

对于 RIGHT

第一个分区是所有小于 '20001001' 的数据

第二个分区是所有大于或等于 '20001001' 数据

由于范围分区可能在 datetime 数据中进行定义,因此必须了解其含义。使用datetime具有某种含义:即总是同时指定日期和时间。未定义时间值的日期表示时间部分为“0”的 12:00 A.M。如果将 LEFT 与此类数据结合使用,则日期为 10 月 1 日 12:00 A.M. 的数据将位于第一个分区,而 10 月份的其他数据将位于第二个分区。从逻辑上讲,最好将开始值与 RIGHT 结合使用,而将结束值与 LEFT 结合使用。下面的三个子句将创建逻辑上相同的分区结构:

RANGE LEFT FOR VALUES ('20000930 23:59:59.997',

'20001231 23:59:59.997',

'0331 23:59:59.997',

'20010630 23:59:59.997')

RANGE RIGHT FOR VALUES ('20001001 00:00:00.000', '20010101 00:00:00.000', '20010401 00:00:00.000', '20010701 00:00:00.000')

RANGE RIGHT FOR VALUES ('20001001', '20010101', '20010401', '20010701')

注意:此处使用 datetime 数据类型确实增加了一定的复杂性,但您需要确保设置正确的边界情况。请注意使用 RIGHT 的简单性,因为默认时间为 12:00:00.000 A.M。对于 LEFT,复杂性增加是因为 datetime 数据类型具有精度。必须选择 23:59:59.997 的原因在于,datetime 数据无法保证毫秒级别的精度。相反,datetime 数据的精度在 3.33 毫秒内。使用 23:59:59.999 这个确切的时间值是不行的,因为该值将被舍入到最接近的时间值,即第二天的 12:00:00.000 A.M。由于进行了这种舍入,将无法正确定义边界,

对于 datetime 数据,必须对明确提供的毫秒值加倍小心。

注意:分区函数还允许将函数作为分区函数定义的一部分。您可以使用 DATEADD(ms,-3,'20010101'),而不是使用 '20001231 23:59:59.997' 明确定义时间。

要在四个活动分区(每个分区代表一个日历季度)中存储四分之一的 Orders 数据,并创建第五个分区以备将来使用(还是作为占位符,用于在分区表中移入和移出数据),请将 LEFT 分区函数与以下四个边界条件结合使用:

CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)

AS

RANGE LEFT FOR VALUES ('20000930 23:59:59.997',

'20001231 23:59:59.997',

'20010331 23:59:59.997',

'20010630 23:59:59.997')

记住,定义四个边界点将创建五个分区。通过查看以下数据集检查此分区创建的数据集:

边界点 '20000930 23:59:59.997' 作为 LEFT(设置模式):

最左侧的分区将包含所有小于或等于 '20000930 23:59:59.997' 的值

边界点 '20001231 23:59:59.997':

第二个分区将包含所有大于 '20000930 23:59:59.997' 但小于或等于 '20001231 23:59:59.997' 的值

边界点 '20010331 23:59:59.997':

第三个分区将包含所有大于 '20001231 23:59:59.997' 但小于或等于 '20010331 23:59:59.997' 的值

边界点 '20010630 23:59:59.997':

第四个分区将包含所有大于 '20010331 23:59:59.997' 但小于或等于 '20010630 23:59:59.997' 的值

最后,第五个分区将包含所有大于 '20010630 23:59:59.997' 的值。

创建分区架构

创建分区函数后,必须将其与分区架构相关联,以便将分区定向至特定的文件组。定义分区架构时,即使多个分区位于同一个文件组中,也必须为每个分区指定一个文件组。对于前面创建的范围分区 (OrderDateRangePFN),存在五个分区;最后一个空分区将在 PRIMARY 文件组中创建。因为此分区永远不包含数据,所以不需要指定特殊的位置。

CREATE PARTITION SCHEME OrderDatePScheme

AS

PARTITION OrderDateRangePFN

TO ([2000Q3], [2000Q4], [2001Q1], [2001Q2], [PRIMARY])

注意:如果所有分区都位于同一个文件组中,则可以使用以下更简单的语法:

CREATE PARTITION SCHEME OrderDatePScheme

AS

PARTITION OrderDateRangePFN

ALL TO ([PRIMARY])

创建分区表

定义分区函数(逻辑结构)和分区架构(物理结构)后,即可创建表来利用它们。表定义应使用的架构,而架构又定义函数。要将这三者结合起来,必须指定应该应用分区函数的列。范围分区始终只映射到表中的一列,此列应与分区函数中定义的边界条件的数据类型相匹配。另外,如果表应明确限制数据集(而不是从负无穷大到正无穷大),则还应添加 CHECK 约束。

CREATE TABLE [dbo].[OrdersRange]

(

[PurchaseOrderID] [int] NOT NULL,

[EmployeeID] [int] NULL,

[VendorID] [int] NULL,

[TaxAmt] [money] NULL,

[Freight] [money] NULL,

[SubTotal] [money] NULL,

[Status] [tinyint] NOT NULL ,

[RevisionNumber] [tinyint] NULL ,

[ModifiedDate] [datetime] NULL ,

[ShipMethodID] [tinyint] NULL,

[ShipDate] [datetime] NOT NULL,

[OrderDate] [datetime] NOT NULL

CONSTRAINT OrdersRangeYear

CHECK ([OrderDate] >= '20030701'

AND [OrderDate] <= '0630 11:59:59.997'),

[TotalDue] [money] NULL

)

ON OrderDatePScheme (OrderDate)

GO

建立索引:是否分区?

默认情况下,分区表中创建的索引也使用相同的分区架构和分区列。如果属于这种情况,索引将与表对齐。尽管未作要求,但将表与其索引对齐可以使管理工作更容易进行,对于滑动窗口方案尤其如此。

例如,要创建唯一的索引,分区列必须是一个关键列;这将确保对相应的分区进行验证,以保证索引的唯一性。因此,如果需要在一列上对表进行分区,而必须在另一个列上创建唯一的索引,这些表和索引将无法对齐。在这种情况下,可以在唯一的列(如果是多列的唯一键,则可以是任一关键列)中对索引进行分区,或者根本就不进行分区。请注意,在分区表中移入和移出数据时,必须删除和创建此索引。

注意:如果您打算使用现有数据加载表并立即在其中添加索引,则通常可以通过以下方式获得更好的性能:先加载到未分区、未建立索引的表中,然后在加载数据后创建分区索引。通过为分区架构定义群集索引,可以在加载数据后更有效地为表分区。这也是为现有表分区的不错方法。要创建与未分区表相同的表并创建与已分区群集索引相同的群集索引,请用一个文件组目标位置替换创建表中的 ON 子句。然后,在加载数据之后为分区架构创建群集索引。

篇6:实现自动安装SQLServer数据库数据库

下面简单介绍一下如何在工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自动安装合并模块MSM: 1. 首先你需要下载MSDE2000的sp3安装包,可以从下面的链接去下载,URL: www.microsoft.com/sql/downloads/2000/sp3.asp 2. 下载完成,

下面简单介绍一下如何在工程中添加Microsoft SQL Server 2000 Desktop Engine (MSDE)的自动安装合并模块MSM:

1. 首先你需要下载MSDE2000的sp3安装包。可以从下面的链接去下载,URL: www.microsoft.com/sql/downloads/2000/sp3.asp

2. 下载完成,你可以安装或者用ZIP解压到本地硬盘,将可以看到:Msi、MSM、Setup这3个目录和setup等文件,其中的MSM文件夹中的东东就是本文要介绍的MSDE2000合并模块。

3. 在你的工程中添加一个安装工程(假设为MySetup1,路径为c:MySetup1),按照正常的步骤添加工程输出(Project Output),选择输出文件(primary output)和内容文件(content files)两项。

4. 添加合并模块(Merge Moudle),选择浏览,指定到你的MSDE的MSM文件夹,选则MSM和msm1033下的所有的文件(REPL.MSM、REPL_RES.MSM、DMO_RES.MSM和DMO.MSM可以不选),打开。

5. 设置安装工程的属性(Properties)中的SearchPath,指定为你的MSM所在路径(这时需要添加两个:pathMSM和pathMSM1033)。

6. 设置关于安装程序的其他属性咱们暂且不提,这是可以对你的安装工程进行编译了,当编译通过后,你可以在c:MySetup1Debug看到你的打包工程MySetup.msi.

7. 这是工程打包告一段落,下面我们需要修改打好的安装包,使它可以在安装完程序后自动安装MSDE的一个实例(假设实例名为:MyServer)。现在我们需要用到MS的一个工具ORCA,下载地址:support.microsoft.com/default.aspx?scid=kb;EN-US;255905安装了orca后就可以利用这个工具对我们的MySetup1.msi进行修改了。

8. 用ORCA打开安装包文件MySetup.msi,找到Property这个table,ADD Row 在Propetry中填入SqlInstanceName,value中填入实例名MyServer.其他的参数请参见:support.microsoft.com/?id=810826和support.microsoft.com/default.aspx?scid=kb;en-us;281983

9. 所有的参数中有关密码的属性,我没有成功,就是SqlSaPwd,这个参数是和SqlSecurityMode一起使用的,但是我一直没有设置成功,密码总是为空的,不知何故!

10. 选择InstallExecuteSequence这个table,找到SetPropSQLMSDEInstalled这个Action,修改206为102;找到RemoveExistingProducts,修改1525为6601.保存,退出!

这时,在没有SQL环境的机器上运行你的安装包,在程序安装完后,会自动安装MSDE的MyServer实例,并在重起机器后,自动启动Sql Server的实例。

前一篇中介绍了如何连同Sql Server的桌面版本一同打包到安装程序的简单步骤,这里还想就自己对于:发布程序到已经有SQL环境的计算机时,自动使用SQL的Osql来恢复指定的数据库到你的SQL Server的Date中。

首先,在c:创建一个临时目录,例如c:TempBD ,拷贝Osql.exe到目录下,拷贝你的数据库备份(TruckDB)到目录下;在目录下分别创建Restore.bat和Restore.txt文件,内容如下:

1. Restore.bat文件内容:

osql -E -S -i C:TempDBRestore.txt

2. Restore.txt文件内容:

use master

if exists (select * from sysdevices where name='TruckDB')

EXEC sp_dropdevice 'TruckDB'

Else

EXEC sp_addumpdevice 'disk','TruckDB', 'C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB.mdf'

restore database TruckDB

from disk='c:TempDBTruckDB'

with replace

其次,在你的工程中添加一个Installer Class:选中Project主工程,添加Installer Class,名称假定为installer1.选择instller1的代码页,添加下面的代码:

Public Overrides Sub Install(ByVal stateSaver As System.Collections.IDictionary)

'重写install方法

Dim file As System.IO.File

If file.Exists(“C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB_data.mdf”) = True Then Exit Sub

MyBase.Install(stateSaver)

Dim CheckedDir As System.IO.Directory

If CheckedDir.Exists(“C:Program FilesMicrosoft SQL ServerMSSQLData”) = False Then

CheckedDir.CreateDirectory(“C:Program FilesMicrosoft SQL ServerMSSQLData”)

End If

Dim FullPath As String

Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly

Dim strConfigLoc As String

strConfigLoc = Asm.Location

Dim file As System.IO.File

If file.Exists(“C:Program FilesMicrosoft SQL ServerMSSQLDataTruckDB_data.mdf”) = True Then Exit Sub

MyBase.Install(stateSaver)

Dim CheckedDir As System.IO.Directory

If CheckedDir.Exists(“C:Program FilesMicrosoft SQL ServerMSSQLData”) = False Then

CheckedDir.CreateDirectory(“C:Program FilesMicrosoft SQL ServerMSSQLData”)

End If

Dim FullPath As String

Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

Dim strConfigLoc As String

strConfigLoc = Asm.Location

Dim strTemp As String

strTemp = strConfigLoc

'提取安装路径

strTemp = strTemp.Remove(strTemp.LastIndexOf(“”), Len(strTemp) - strTemp.LastIndexOf(“”))

'Copy DateBase to computer.

If CreatDIR(strTemp) = False Then

'失败,反安装

Me.Uninstall(stateSaver)

Exit Sub

Else

End If

If InstallDB(strTemp) = False Then

‘失败,反安装

Me.Uninstall(stateSaver)

Exit Sub

Else

End If

‘删除数据库临时文件

DeleteDIR(“c:TempDB”)

DeleteDIR(strTemp + “TempDB”)

End Sub

Public Overrides Sub Uninstall(ByVal stateSaver As System.Collections.Idictionary)

‘执行反安装

‘利用反射提取安装路径

MyBase.Uninstall(stateSaver)

Dim Asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

Dim strConfigLoc As String

strConfigLoc = Asm.Location

Dim strTemp As String

strTemp = strConfigLoc

strTemp = strTemp.Remove(strTemp.LastIndexOf(“”), Len(strTemp) ? strTemp.LastIndexOf(“”))

‘删除数据库文件和临时文件

DeleteDIR(strTemp + “TempDB”)

DeleteDIR(“c:TempDB”)

End Sub

Private Function DeleteDIR(ByVal path As String) As Boolean

‘删除指定的文件夹

Dim dir As System.IO.Directory

If dir.Exists(path) = True Then dir.Delete(path, True)

End Function

Private Function CreatDIR(ByVal path As String) As Boolean

‘创建指定的文件夹

Dim Files As System.IO.File

Dim Dirs As System.IO.Directory

Try

If Dirs.Exists(“c:TempDB”) = False Then Dirs.CreateDirectory(“c:TempDB”)

‘copy Creat DB files

CopyFile(path + “TempDB”, “C:TempDB”)

Return True

Catch

Return False

End Try

End Function

Private Sub CopyFile(ByVal SourceDirName As String, ByVal DestDirName As String)

‘copy指定的文件夹的所有文件到目标文件夹(单层),

Dim dir As System.IO.Directory

Dim File As System.IO.File

Dim sPath, oPath As String

Dim I As Integer

For I = 0 To dir.GetFiles(SourceDirName)。Length ? 1

sPath = dir.GetFiles(SourceDirName)。GetValue(i)。ToString

Path = Microsoft.VisualBasic.Right(sPath, Len(sPath) ? Len(SourceDirName))

File.Copy(sPath, DestDirName + oPath, True)

Next

End Sub

Private Function InstallDB(ByVal path As String) As Boolean

‘安装数据库,调用自动批处理。

'Dim CheckedDir As System.IO.Director

原文转自:www.ltesting.net

篇7:实现SQLServer数据库转成MYSQL数据库

本次转换需要依赖使用工具Navicat Premium。

首先,将数据库移至本地SQLServer,我试过直接在局域网上其他SQLServer服务器上想转到本地Mysql好像有问题,想将远程数据库备份恢复到本地。

1、打开Navicat Premium,新建一个同名的数据库,然后在表上点击“导入向导”。并选择“ODBC”。

2、选择SQLServer提供程序,并输入参数。

3、然后就拼命下一步、下一步。

在这里有个条件查询,如果有太多不想要的数据,或者字段类型有问题导致导入出错可以设置这里。

大功告成,下班吃饭。

补充:这个东西对SQLServer转MySQL数据类型转换的支持不是很好,要手动设置。但是导入数据没有问题,最好的方式是:

先使用工具:mss2sql将SQLServer的表转换成MYSQL的表,然后在使用此工具的ODBC导数据。

[实现SQLServer数据库转成MYSQL数据库]

篇8:SQLServer和XML的集成数据库

XML可谓最新的数据存储 解决方案 了,XML相比HTML给予了Web 开发 人员更大的编程灵活性。这种新技术驱动开发机构尝试把XML同自己的产品集成起来。微软就是采取如此举措的先驱者。微软公司在开发Inte .net 产品的时候一度慢慢腾腾,现在可就不同了。 最近一位

XML可谓最新的数据存储解决方案了。XML相比HTML给予了Web开发人员更大的编程灵活性。这种新技术驱动开发机构尝试把XML同自己的产品集成起来。微软就是采取如此举措的先驱者。微软公司在开发Inte.net产品的时候一度慢慢腾腾,现在可就不同了。最近一位微软公司的高级职员就这样说:“你要给我们一刀,伤口里出来的尽是XML。”也许形容得有点过分,但事实确实是这样的:微软的几乎所有产品中都能看到XML的身影。举个例子:微软是如何在其SQL Server产品线中集成XML的呢?下面咱们就来看看关键的FOR XML子句。

以XML的名义获取信息

SQL Server和XML之间的集成首要一点就是根据SQL数据创建XML文件。XML文件的构造并不复杂,用简单的脚本和ADO记录集就可以轻松产生。这个任务虽然不算麻烦,但开发人员却需要针对他们从服务器获取的结果集合产生不同的脚本,或者编写更为复杂的通用脚本。SELECT 语句则由此而配备了新的FOR XML子句。

该子句的语法如下所示:

[ FOR { XML { RAW | AUTO | EXPLICIT }

[ , XMLDATA ]

[ , ELEMENTS ]

[ , BINARY BASE64 ] } ]

FOR XML子句的XML模式由三种参数值表示:RAW、AUTO或者EXPLICIT。模式决定了结果XML的形式和组成。下面我们就更深入些地通过以下示例了解以上各个XML选项。

RAW示例

我们执行以下的SQL语句:

SET ROWCOUNT 3

SELECT Orders.OrderID, Orders.OrderDate, ProductID

FROM Orders, [Order Details]

WHERE Orders.OrderID = [Order Details].OrderID

ORDER BY Orders.OrderID

FOR XML RAW

执行后产生的结果如下:

AUTO示例

我们执行以下的SQL语句:

‘结果限制为3条记录。

SET ROWCOUNT 3

SELECT Orders.OrderID, Orders.OrderDate, ProductID

FROM Orders, [Order Details]

WHERE Orders.OrderID = [Order Details].OrderID

ORDER BY Orders.OrderID

FOR XML AUTO

产生的结果如下所示:

EXPLICIT示例

Explicit模式给予查询编程人员对产生XML的完全控制能力,

然而这种控制力度却要价不菲:你得编写每一查询以便SQL语句能包含XML信息。

有关的语法很复杂,而且超出了本文的讨论范围。[ , XMLDATA ] [ , ELEMENTS ] [ , BINARY BASE64 ] 是相应的可选参数。

可选元素

示例可以让我们对各种设置的内部工作机理有更多的了解,下面我们就进一步研究下FOR XML语句的可选元素XMLDATA。

如果你设置该选项,那么XML-Data schema就会包含在结果集合里。以下是SQL语句:

SET ROWCOUNT 3

SELECT Orders.OrderID, Orders.OrderDate, ProductID

FROM Orders, [Order Details]

WHERE Orders.OrderID = [Order Details].OrderID

ORDER BY Orders.OrderID

FOR XML AUTO, XMLDATA

以上的SQL语句产生以下结果:

ccurs=”*\"/>…

ELEMENTS

ELEMENTS选项指示各数据列作为子元素而非属性返回。假如你采用AUTO模式就可以只采用该选项。

BINARY BASE64

使用该选项表示你希望采用base64编码格式表示二进制数据。

采用XML子句的说法可就多了,你最好参考下SQL在线图书。

在线指南

SQL Server在线图书 对FOR XML子句的用法进行了阐述。而且还提到了在使用这一子句时要注意的多项限制。比方说,FOR XML字句不能同视图定义或者COMPUTE BY子句合用。你不妨参考有关文档了解更多细节。

本文只是对FOR XML子句的简单说明,这里要提醒你的是这一部分不过是XML同SQL Server集成需要注意的一点,其他方面的问题还包括IIS的OPENXML 函数和模版文件等。看来真是这样,SQL Server的每个毛孔都滴着XML这种东西。

原文转自:www.ltesting.net

篇9:PB如何连接Oracle数据库

如果你已经是个powerbuilder高手,那么下面的东西对你来说毫无价值,你大可不必再看下去,如果你刚刚步入powerbuilder的殿堂,那么下面的东西对你来说可能有点价值,你应该看一看。

作为一个优秀的客户端开发工具,powerbuilder必然需要与大型的数据库相连接,尽管许多资料上都介绍了如何通过odbc或者powerbuilder自带的db profile或者专用接口连接上数据库,但仍然有许多使用者按此方法却无法连接上数据库,这方面的原因可能是powerbuilder本身的原因,比如在安装powerbuilder时的选项、odbc的版本之类;也可能是在安装客户端的oracle、sybase、informix、sql server等软件上的问题,下面就从最根本的odbc配置开始,教你一步步如何连接上数据库。 odbc数据源的配置

进入控制面板,打开odbc数据源(32位),如图1所示,点击“add”按钮,进入odbc数据源的配置面板,如图2所示:

选择“oracle odbc driver”一项,注意当前版本号为“8.00.0400”,如果你的操作系统中安装的是oracle7,则相应的版本号会不同。提醒一点:在windows98操作系统上是无法安装oracle8.0.4的(只能安装oracle7.2.3),oracle8.0.5则没有试过。因而会有一些使用者在windows98系统上无法正常配置odbc数据源,因为windows98本身自带的odbc数据源已经比oracle7数据源版本要高,无论你怎样配置odbc,系统总会提示你要安装一个更高版本的oracle,自然你就无法配置odbc了,有一个解决方法就是用pb7第二张光盘上的odbc安装程序覆盖系统中的odbc,或者把你的操作系统改为windows95/97算了。

然后进入“oracle8 odbc driver setup”设置,在“data source name”一项中随便输入一个名字,在“data source service name”一栏中输入oracle连接数据库的字符串名,这可以在你安装的oracle目录中的tnsnames.ora文件中查看到(oracle7安装路径为“orawin95\\network\\ admin”;oracle8安装路径为“orawin95\\net80\\admin”),或者你通过“sql net easy configuration”新添加一个数据库连接配置,将配置中的字符串填入即可,其他的就不必再填入,避免出现画蛇添足之错,反而连接不上数据库了。 db profile数据源的配置

进入pb,打开db profile,如图4所示,选择odbc一项,点击“new”,进入pb数据源的配置,如图5所示。当然如果你之前没有进行odbc的配置,你也可以在这里点击“config odbc”进入之前你看到的odbc配置界面。

在“profile name”中自定义一个名字,然后从“data source”的下拉菜单中选择你在odbc中已经配置好的数据源,输入登录数据库所需要的用户名与密码,当然你认为没有这个必要性的话可以不在这里输入(主要是不要轻易让人知道你数据库的口令,不然问题就大了),到这一步为止,pb已经做完了所有数据库连接的配置,剩下的就是连接上数据库了。 pb for oracle专用接口的配置

同样是进入pb,点击db profile选项(这是对oracle7版本而言,如果是oracle8,相应的选项就是oracle8.0.4),看到上面的“073 oracle 7.3”选项没有,点击一下,再按“new”进入图7的界面,“profile name”一栏随意填,“server”一栏填写时要注意,oracle7版本一定要在数据连接字符串前加上@,否则不能连接上pb数据库,oracle8版本则不必加上@,其他的设置就可以不用了。

以上三种pb连接数据库的方法其实十分简单,但是初学者却又会经常出错,在这里只是想作为一种抛砖引玉之用,希望广大初学者通过本文对pb数据源配置能够有一定的了解。下面再对oracle连接数据库的配置文件tnsnames.ora简单说明一下,“tnsnames.ora”文件其实是通过“sql net easy configuration”初始化配置后的参数文件,如果你不想通过“sql net easy configuration”进行配置,你只需要把你先前已有的“tnsnames.ora”文件放入oracle的admin目录中,覆盖现有的文件就可以了,当然你也可以再自己添加数据库连接字符串。通常,一个“tnsnames.ora”文件内容如下: ······kf.world = (description = (address_list =(address =(community = tcp.world) (protocol = tcp) (host = 136.12.145.5) (port = 1521) ) (address =(community = tcp.world) (protocol = tcp) (host = 136.12.145.5) (port = 1526) ) ) (connect_data = (sid = sid3) ) )······

其中最要的是第一项和最后一项(这里是以tcp/ip网络连接,大多数用户都是以此连接),host一栏是主机地址,“connect_data = (sid = sid3)”中的sid3是连接主机数据库的字符串,你要修改这几项就可以了。另外谈谈如何让英文版的oracle7显示中文,其实很简单,只要将注册表“hkey_local_machine\\ software\\oracle\\nls_lang”中的值改为如下值就可以了“ simplified chinese_china.zhs16cgb231280”。