我用的是新版的Visual Studio 2008,数据库用的是SQL Server 2008,我在用Connection连接数据库的时候,一直报错,不知道该怎么办才好?我的连接语句是:SqlConnection con = new SqlConnection();
con.ConnectionString = " server=127.0.0.1;uid=;pwd=;database=master";
con.Open();//打开数据库
Label1.Text = "数据库连接对象成功创建,并且已经打开";
con.Close();//关闭数据库
我的sql server 用的是windows 身份验证模式,以前用的sqlserver 2005还可以连接上,但是换了sql 2008就连接不上了?
方法一:
把你的验证模式改了,换成用户模式或集成、用户混合模式
方法二:
把你的连接字符串改了,用集成方式连接
string conStr = "Data Source=SQLServer2005;Initial Catalog=master;Integrated Security=True";//连接字符串
可以,在工具箱中,找到sqldatasource控件,添加到页面中,配制一个就可以了,不用写代码的
http://zhidao.baidu.com/question/158164407.html?fr=qrl&cid=869&index=1&fr2=query
在vs2005下开发默认使用CF.net的版本为2.0,同时默认使用的SQL CE版本是3.0。一般在以下目录 C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\SQL Server\Mobile\v3.0或者C:\Program Files\Microsoft SQL Server 2005 Mobile Edition\Device\Mobile\v3.0。
在vs2008下开发默认使用CF.net的版本为3.5,但是可以选择2.0,同时默认使用的SQL CE版本是3.5。一般存放在C:\Program Files\Microsoft SQL Server Compact Edition\v3.5\Devices\。
sdf数据文件和System.Data.SqlServerCe.dll是一对一绑定,3.5的sdf数据文件只能用3.5的SqlServerCe.dll,3.0的sdf数据文件只能用3.0的SqlServerCe.dll的,彼此互不兼容。
如果使用3.0的SqlServerCe.dll访问3.5的sdf数据文件会有以下异常
答:可以。在Windows CE下主要应用的几种数据库有EDB, SQL CE, sqlite(一种开源的数据库)。其中EDB是一种小型的非关系型的数据库,如果数据量比较少,可以考虑使用EDB,操作起来相对简单。SQL CE是关系型数据库,适用于发杂一些的数据存储。
Windows CE 5.0下没有ACCESS数据库,所以不能够直接使用。如果非要使用,需要将ACCESS和SQL CE间进行数据的转换。具体的内容需要在网上查些资料,实现起来麻烦。
WIN XP SP3,笔记本电脑(主要还不清楚是否有那些硬件不兼容)
安装 USB下载驱动正常,但启动CE后,连接USB线到电脑无法自动安装驱动,使用提供的CE连接驱动安装完成即电脑系统蓝屏,
若USB线一直连接电脑,电脑重启直接蓝屏。
经过多次实验后,最终解决:
1.先连接电脑,并安装驱动,蓝屏后关机,然后拔掉USB线启动进入系统,将 INF目录下的wceusbsh.inf,wceusbsh.PNF删除,将system32\drivers\wceusbsh.sys删除
2. 不用重启,连接USB线,同步工具将会显示连接。
途径:
一体机在出厂时,会在系统中烧录一个序列号,每台机器的序列号都不相同且不可修改。这就提供了一种软件简单加密的途径。可以在程序启动之初,通过函数读取机器序列号并与给定之序列号做比较。如不相同,说明你的程序被拿到了其他的机器上运行,可以考虑将程序终止。
参考:
下面是这种方法的一个简单的参考。
① 首先列出该参考程序中用到的一些变量,句柄,数组,宏定义等。
HANDLE hDriver; // 保存加载驱动所返回的句柄
#define IMEI_LENGTH 16 // 序列号的长度为16个字节
#define IOCTL_HAL_GET_IMEI 2 // DeviceIoControl函数的一个参数
Const unsigned char IMEI[IMEI_LENGTH] =
{'f', 'e', 'd', 'c', 'b', 'a', '9', '8', '7', '6', '5', '4', '3', '2', '1', '0'}; // 本台机器在出厂时烧录的序列号,程序中就是读取本台机器序列号,与之作比较
unsigned char TempIMEI[IMEI_LENGTH]; // 作为程序中所读取的序列号的缓冲区
DWORD rlRuturn; // 作为DeviceIoControl的一个参数
int i; // 用于下面的for循环
② 加载相关驱动
hDriver = CreateFile(TEXT("GID1:"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL);
if (hDriver == INVALID_HANDLE_VALUE)
{
AfxMessageBox(TEXT("Cannot open driver"));
}
③ 读取机器序列号,所读取的数据存储在上面声明的缓冲区数组TempIMEI中。
DeviceIoControl(hDriver, IOCTL_HAL_GET_IMEI,NULL, 0,
TempIMEI, IMEI_LENGTH, &rlRuturn, NULL);
④ 将程序所读取的序列号与(说明书中提供的)本台机器的序列号做比较,如果不相同,说明你为本台机器所开发的程序被拿到了其他机器上运行。此时可以考虑终止程序。
for(i=0; i<IMEI_LENGTH; i++)
{
if(TempIMEI[i] != IMEI[i])
{
AfxMessageBox(TEXT("IMEI ERROR!!!"));
// 在此处考虑终止程序的运行
}
}