符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
C++连接SQL数据库第一步 系统配置
公司主营业务:网站制作、网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联公司推出邵阳免费做网站回馈大家。
1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。
2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。否则无法通过系统本身的安全策略。测试通过就完成了配置。
C++连接SQL数据库第二步 C++与SQL连接初始化
1.在你所建立的C++项目中的stdafx.h头文件中引入ADO
具体代码如下
#import “c:\Program Files\Common Files\System\ado\msado15.dll”
no_namespace rename(”EOF”, “adoEOF”) rename(”BOF”, “adoBOF”)
2.定义_ConnectionPtr变量后调用Connection对象的Open方法建立与服务器的连接。
数据类型_ConnectionPtr实际上是由类模板_com_ptr_t得到的一个具体的实例类。_ConnectionPtr类封装了Connection对象的Idispatch接口指针及其一些必要的操作。可以通过这个指针操纵Connection对象。
例如连接SQLServer数据库,代码如下:
//连接到MS SQL Server
//初始化指针
_ConnectionPtr pMyConnect = NULL;
HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
return;
//初始化链接参数
_bstr_t strConnect = “Provider=SQLOLEDB;
Server=hch;
Database=mytest;
uid=sa; pwd=sa;”; //Database指你系统中的数据库
//执行连接
try
{
// Open方法连接字串必须四BSTR或者_bstr_t类型
pMyConnect-Open(strConnect, “”, “”, NULL);
}
catch(_com_error e)
{
MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION);
}//发生链接错误
C++连接SQL数据库第三步 简单的数据连接
//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集
//初始化过程 以下是个实例
_RecordsetPtr pRecordset;
if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))
{
return;
}
//执行操作
try
{
pRecordset-Open(_variant_t(”userinfo”),
_variant_t((IDispatch*)pMyConnect),
adOpenKeyset, adLockOptimistic, adCmdTable);
}
catch (_com_error e)
{
MessageBox(”无法打开userinfo表\”, “系统提示”,
MB_OK|MB_ICONINFORMATION);
}
C++连接SQL数据库第四步 执行SQL语句
这里是关键,我认为只要你懂点SQL语句那么一切都会方便许多比用上面的方法简单,更有效率点。
首先
m_pConnection.CreateInstance(_uuidof(Connection));
//初始化Connection指针
m_pRecordset.CreateInstance(__uuidof(Recordset));
//初始化Recordset指针
CString strSql=”select * from tb_goods”;//具体执行的SQL语句
m_pRecordset=m_pConnection-Execute(_bstr_t(strSql),
NULL, adCmdText);//将查询数据导入m_pRecordset数据容器
至此 你的SQL语句已经执行完成了m_pRecordset内的数据就是你执行的结果。
取得记录:
while(!m_pRecordset-adoEOF)//遍历并读取name列的记录并输出
{
CString temp = (TCHAR *)(_bstr_t)m_pRecordset-GetFields()-GetItem
(”name”)-Value;
AfxMessageBox(temp);
pRecordset-MoveNext();
}
插入记录
//记得初始化指针再执行以下操作
CString strsql;
strsql.Format(”insert into tb_goods(no,name, price)
values(’%d’,'%s’, %d)”,m_intNo,m_strName,m_intPrice);
m_pRecordset=m_pConnection-
Execute(_bstr_t(strsql),NULL,adCmdText);
修改记录
CString strsql;
strsql.Format(”update tb_goods set name=’%s’ ,
price=%d where no=%d “,m_strName,m_intPrice,m_intNo);
m_pRecordset=m_pConnection-Execute(_bstr_t(strsql),NULL,adCmdText);
删除记录
CString strsql;
strsql.Format(”delete from tb_goodswhere no= ‘%d’ “,m_intNo);
m_pRecordset=m_pConnection-Execute(_bstr_t(strsql),NULL,adCmdText)
使用 ADODB.Command 来调用存储过程,如:
Dim adoComm As Object
'// 创建一个对象,我们用来调用存储过程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
'// 设置连接,假设 adoConn 为已经连接的 ADODB.Connection 对象
.ActiveConnection = adoConn
'// 类型为存储过程,adCmdStoredProc = 4
.CommandType = 4
'// 存储过程名称
.CommandText = "你的存储过程名称"
'// 设置输入参数
.Parameters.Item("@输入参数").Value = "值"
'// 执行存储过程
.Execute
If .Parameters.Item("@返回参数名称").Value = True Then
Else
End If
End With
'// 释放对象
Set adoComm = Nothing
C++不像php那样智能,没有集成的wamp环境,因此,C++连接数据库也就没有那么方便。上网查了些资料,终于连接成功了,记录下过程 。
1.在电脑上安装mysql
这一步网上有人说必须选择custmo模式,不过我安装时没有选择,也连接成功了。貌似没有那个必要。
2.下载mysql头文件
这个 必须要有,下载好后,把里面的.h文件放到codeblocks的Include文件夹下。这上步的目的是在写程序中,可以引用mysql.h等头文件。
3.在codeblocks中的project - build options -setting and link ,添加,找到libmysql.lib,mysqlclient.lib,mysqld.lib这三个文件,把这三个文件的路径全部加过去,目的是使codeblocks能够找到并编译。如果是默认安装的话,这三个文件所在的位置是C:\Program Files\MySQL\MySQL Server 5.1\lib,每个人的位置可能不一样。
4.这时试着连接数据库,如果不能够连接成功,则可能会出现“没有找到libmysql.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”解决方法:
4.1:将C:\mysql\lib\opt目录下的libmysql.dll拷贝到 C:\WINDOWS\system32目录下
4.2:将libmysql.dll拷贝到.exe所在的文件下
你这样的状况,建议你百度搜 MFC通过ADO连接SQLServer 网上很多资料的。
CString的Format的用法:
int a = 10;
double b = 10.0F;
CString str;
str.Format("%d",a);//将int型转换为字符串 str = "10";
str.Format("%f",b);//将double型转换为字符串 str = "10.0000000000",具体几个0忘了。
//简单举例。
一、启用FileTable1、修改数据库引擎的属性打开“SQLServer配置管理器”,修改SQLServer数据库引擎的属性。使用此页可针对此MicrosoftSQLServer2012安装启用FILESTREAM。(1)针对Transact-SQL访问启用FILESTREAM选中此项可针对Transact-SQL访问启用FILESTREAM。必须选中此控制选项,才能使用其他控制选项。如果不启用此选项,就不能添加FileStream文件组。(2)针对文件I/O流访问启用FILESTREAM选中此项可针对FILESTREAM启用Win32流访问。(3)Windows共享名使用此控制选项可输入将用来存储FILESTREAM数据的Windows共享的名称。默认为该SQLServer实例的名称。(4)允许远程客户端针对FILESTREAM数据启用流访问选中此控制选项可允许远程客户端访问此服务器上的此FILESTREAM数据。2、修改服务器的属性打开“SQLServerManagementStudio”,修改该实例的配置。默认配置如下:上述选项解释如下:(1)“FILESTREAM访问级别”显示SQLServer实例上支持的FILESTREAM的当前级别。若要更改访问级别,请选择以下值之一:已禁用无法将二进制大型对象(BLOB)数据存储在文件系统中。此为默认值。即filestreamaccesslevel=0已启用Transact-SQL访问可使用Transact-SQL访问FILESTREAM数据,但不能通过文件系统进行访问。即filestreamaccesslevel=1已启用完全访问FILESTREAM数据可使用Transact-SQL以及通过文件系统进行访问。即filestreamaccesslevel=0注意:在首次启用FILESTREAM时,您可能需要重新启动计算机才能配置驱动程序。(2)“FILESTREAM共享名称”显示在安装过程中选择的FILESTREAM共享的只读名称。在本次实验中,我们将“FILESTREAM访问级别”设定为:已启用完全访问。如果是通过T-SQL脚本执行,则运行以下脚本:EXECsys.sp_configureN'filestreamaccesslevel',N'2'RECONFIGUREWITHOVERRIDE注意:设置完成之后,重启实例。3、配置防火墙若要在防火墙保护的环境中使用FILESTREAM,客户端和服务器都必须能够将DNS名称解析为包含FILESTREAM文件的服务器。FILESTREAM要求Windows文件共享端口139和445处于打开状态。二、配置文件组1、添加文件组完成上述操作之后,就可以为该数据库添加专用于FileStream的文件组。如果是通过脚本操作,请运行以下脚本:ALTERDATABASE[db01]ADDFILEGROUP[FileStreamFileGroup]CONTAINSFILESTREAM2、添加文件完成上述操作之后,就可以为该数据库添加FilStream类型的数据库文件。在本例中,系统并没有为“FileStream数据”的文件类型创建mdf或ndf文件,而是在文件夹C:\SqlData下面自动创建以逻辑名称命名的文件夹,即C:\SqlData\FileData。其中filestream.hdr文件是FILESTREAM容器的头文件。当这个数据库被删除时,mdf、ndf、log连同这个文件夹都会被删除。如果是通过脚本操作,请运行以下脚本:ALTERDATABASE[db01]ADDFILE(NAME=N'FileData',FILENAME=N'C:\SqlData\FileData')TOFILEGROUP[FileStreamFileGroup]注意:在上例中,在运行脚本之前,必须存在C:\SqlData,建议使用右侧的选择按钮选择路径。如果路径不存在,就会报错:同时不能存在重复的文件夹,即不能存在C:\SqlData\FileData。否则也会报错:3、启动非事务访问FileTable使Windows应用程序可以获取FILESTREAM数据的Windows文件句柄而不需要SQLServer事务。为了允许对SQLServer中存储的文件进行此非事务性访问,必须为要包含FileTable的每个数据库在数据库级别上指定所需的非事务性访问级别。选项解释如下:(1)FILESTREAM非事务访问为从文件系统到FileTables中存储的FILESTREAM数据的非事务性访问指定以下选项之一:OFF、READ_ONLY或FULL。如果在服务器上未启用FILESTREAM,则该值将设置为OFF并且被禁用。在本次实验中,将其设置为FULL。(2)FILESTREAM目录名称为与所选数据库相关联的FILESTREAM数据指定目录名称。在FileTable文件夹层次结构中,此数据库级目录将成为在实例级别为FILESTREAM指定的共享名称的子级以及在数据库中创建的FileTable的父级。如果启用非事务性访问时没有提供目录名称,则在以后必须提供它,这样才能在数据库中创建FileTable。如果是通过脚本执行,如下:ALTERDATABASEdb01SETFILESTREAM(NON_TRANSACTED_ACCESS=FULL,DIRECTORY_NAME=N'ImageFiles')注意:更改现有数据库时,调用带DIRECTORY_NAMEFILESTREAM选项的ALTERDATABASE(Transact-SQL)语句。使用这些选项更改目录名称时,数据库必须以独占方式锁定,没有打开的文件句柄。说明:为检查是否在数据库上启用了非事务性访问,可以查询目录视图,脚本如下:SELECTDB_NAME(database_id),non_transacted_access,non_transacted_access_descFROMsys.database_filestream_options三、创建FileTable1、创建第一个FileTable“SQLServerManagementStudio”只提供一个脚本模板,要想创建FileTable还是得用脚本完成:USEdb01CREATETABLEImageTable1ASFILETABLE官方的范本为:USE[db01]CREATETABLE[dbo].[ImageTable1]ASFILETABLEON[PRIMARY]FILESTREAM_ON[FileStreamFileGroup]WITH(FILETABLE_DIRECTORY=N'ImageTable1',FILETABLE_COLLATE_FILENAME=Chinese_PRC_CI_AS)2、创建第二个FileTableCREATETABLEImageTable2ASFILETABLE3、获取共享路径文件表创建之后,就会相应的产生一个文件表共享目录,该目录路径可以通过内建函数获取:SELECTFileTableRootPath('ImageTable1')本次实验所返回的结果为:\\SQL1\SqlFile\ImageFiles\ImageTable14、查看通过Windows资源管理器,可见已经创建了以GUID命名的文件夹。通过SQLServerManagementStudio,查看表的结构。四、操作1、向文件夹中添加文件通过“Windows资源管理器”,向文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1中添加一个文件A01.GIF。然后运行脚本:select*fromImageTable1结果如下:可见,SQLServer自动在Table中添加了记录。2、文件改名运行以下脚本:updateImageTable1setname='Cup.GIF'wherename='A01.GIF'通过“Windows资源管理器”,查看文件夹\\SQL1\SqlFile\ImageFiles\ImageTable1,可见文件A01.GIF已经被改名为Cup.GIF。3、查看共享文件夹我们可以继续复制其他文件,然后通过“Windows资源管理器”,查看文件夹。4、删除文件可以使用脚本删除,例如:DeleteImageTable1wherename='Cup.GIF'或者,通过“Windows资源管理器”直接删除该文件。五、备份和还原1、备份数据库使用SQLServer备份数据库时,FILESTREAM数据将与数据库中的结构化数据一起备份。2、部分备份如果不想将FILESTREAM数据与关系数据一起备份,则可以使用部分备份将FILESTREAM文件组排除在外。六、相关说明详见/zh-cn/library/gg492086.aspx1、AlwaysOn在包含FILESTREAM或FileTable数据的数据库属于某一AlwaysOn可用性组时:FILESTREAM和FileTable函数接受或返回虚拟网络名称(VNN),而非计算机名称。有关这些函数的详细信息,请参阅Filestream和FileTable函数(Transact-SQL)。通过文件系统API对FILESTREAM或FileTable数据进行的所有访问都应该使用VNN,而非计算机名称。2、表分区FileTable不支持分区。通过对多个FILESTREAM文件组的支持,在大多数方案中可以解决纯向上扩展问题,而不必使用分区(不像SQL2008FILESTREAM)。3、复制FileTable不支持复制和相关功能(包括事务性复制、合并复制、更改数据捕获和更改跟踪)。4、视图可以像为任何其他表一样为FileTable创建视图。但是对于为FileTable创建的视图有以下注意事项:视图将不具有任何FileTable语义,也就是说,视图中的列(包括“文件属性”列)的行为与常规视图列一样,不具有任何特殊语义,对于表示文件/目录的行也是如此。可以基于“可更新视图”语义更新视图,但是基础表约束可能拒绝更新,就像在表中一样。可以通过将文件的路径添加为视图中的显式列,在视图中显示该路径。例如:CREATEVIEWMP3FILESASSELECTcolumn1,column2,…,GetFileNamespacePath()ASPATH,column3,…FROMDocuments
嵌入式SQL程序的VC+SQL
server
2000实现的环境配置
嵌入SQL的C应用程序具体到VC++6.0,
SQL
Server2000
下调试可分为五步:1、环境初始化;2、预编译;3、编译;4、连接;5、运行。下面就其中重要的的操作方法给以详细说明。
1、环境初始化
(1)
SQL
Server2000为其嵌入式SQL提供了一此特殊的接口;默认的安装方式没有安装这此接口;因此,需要把devtools.rar解压到SQLServer的系统日录下(即文件夹devtools中的所有文件);如果操作系统安装在C盘,则SQL
Server的系统目录是C:\Program
Files\Microsoft
SQL
Server。(或
在安装Microsoft
SQL
Server
2000时选择安装Development
Tools,为使用嵌入式SQL语言准备必要的头文件和库文件。)
(
2)初始化Visual
C++
6.0编译器环境。在命令行方式下运行文件\Microsoft
Visual
Studio\VC98\Bin\vcvars32.bat。
(3)初始化SQL
Server的预编译环境。在命令行方式下运行文件:\Devtools\samples\esqlc\setenv.bat。
(
4)
VC++6.0环境配置。具体配置分为如下三步[:
①Tools-options-directories-Include
Files:添加
C:\Program
Files\Microsoft
SQL
Server\devtools\include。将SQL
server自带的用于数据库开发的头文件包含到工程环境中。
②Tools-options-directories-Lib
Files:添加C:\Program
Files\Microsoft
SQL
Server\devtools\x861ib。将开发用到的包包含到工程中。
③project-Settings-Link-Object/Library
Modules,添加库文件:SQLakw32.lib,
Caw32.lib。这两个文件之间用空格分开。
2、预编译
C语言编译程序不能识别应用程序中的SQL语句,需要经过预处理程序将其转换成C语句。SQL
Server的预处理程序是nsqlprep.exe。
nsqlprep.exe在SQL
Server安装日录的MSSQL\Binn下。若SQL
Server数据库采用的是默任安装方式,则需要把binn.rar的内容拷贝到指定目录下。
Microsoft
SQL
Server
2000提供的预编译程序nsqlprep.exe,用于对嵌入式SQL程序进行预编译处理,生成C语言源程序.实际上就是将嵌入式SQL程序中的嵌入式SQL语句替换为对运行时库文件Sqlakw32.
dll的函数调用,接着运行时库文件调用动态连接库Ntwdblib.
dll通过网络来存取Microsoft
SQL
Server
2000数据库服务器.
预编译程序nsqlprep的常用语法为:
nsqlprep
ESQL_File
/SQLACCESS
/DB
server_name.database_name
/PASS
login.password
其中ESQL_File是要预编译的嵌入式SQL程序;/SQLACCESS通知nsqlprep自动地为嵌入式SQL程序中的静态SQL语句创建相应的存储过程;/DB
server_name.database_name指明要连接的服务器以及数据库名称;/PASS
login.password给出登录名及相应的口令.
下面的程序demo.sqc实现了从数据库服务器hushaobo的数据库pubs中的authors表中读取au_lname为white的人对应的
au_fname
值,并保存到变量first_name
中显示出来。(连接数据库的用户为sa,对应密码为1982)
#includestdio.h
void
main()
{
EXEC
SQL
BEGIN
DECLARE
SECTION;
char
first_name[40];
char
last_name[]="White";
EXEC
SQL
END
DECLARE
SECTION;
EXEC
SQL
CONNECT
TO
hushaobo.pubs
USER
sa.1982;
EXEC
SQL
SELECT
au_fname
INTO
:first_name
from
authors
WHERE
au_lname
=
:last_name;
EXEC
SQL
DISCONNECT
ALL;
printf("first
name:
%s
\n",first_name);
}
在命令行下运行:nsqlprep
demo.sqc
/SQLACCESS
/DB
hushaobo.pubs
/PASS
sa.1982
则生成demo.c,将该文件添加到VC工程中编译即可。
3、编译,连接与运行
在VC++6.0中创建一个
"WIN32
Console
Application"的Proiect,然后将预编译生成的c文件加入Proiect,编译连接即可生成访问SQL
Server的可执行程序。
Visual
C++
6.0进行编译连接时需要用到动态链接库SQLakw32.d11与SQLaiw32.d11;尽管这两个文件已经随同binn.rar被拷贝到SQLServer安装目录的MSSQL\Binn文件夹下,但仍然需要把它们的路径加到系统路径变量中,以使得程序运行时能找到它们,具体添加方法如下:
方法1:把这两个文件拷贝到操作系统目录下的system32子目录中。
方法2:我的电脑-属性-高级-环境变量-path-编辑,在变量值中加入路径值;新路径与已有路径间用;间隔。
注意调适程序时,文件名中不要包含cursor,否则可能会出错。