2 u014257954 u014257954 于 2014.04.30 18:47 提问

vs2012连接SQL SERVER的问题

#include

#include

#include

#include

#include

#include

#include

SQLHENV henv = SQL_NULL_HENV;

SQLHDBC hdbc1 = SQL_NULL_HDBC;

SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

/*
cpp文件功能说明:
1.数据库操作中的添加,修改,删除,主要体现在SQL语句上
2.采用直接执行方式和参数预编译执行方式两种
/

int main(){

RETCODE retcode;

SQLCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",

szUID[MAXNAME] = "sa",

szAuthStr[MAXNAME] = "";

//SQL语句

//直接SQL语句

SQLCHAR sql[37] = "insert into test values('aaa','100')";

//预编译SQL语句

SQLCHAR pre_sql[29] = "insert into test values(?,?)";

//1.连接数据源

//1.环境句柄

retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);

retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,

(SQLPOINTER)SQL_OV_ODBC3,

SQL_IS_INTEGER);

//2.连接句柄

retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);

retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);

//判断连接是否成功

if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {

printf("连接失败!\n");

} else {

//2.创建并执行一条或多条SQL语句

/

1.分配一个语句句柄(statement handle)
2.创建SQL语句
3.执行语句
4.销毁语句
*/

retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);

//第一种方式

//直接执行

//添加操作

//SQLExecDirect (hstmt1,sql,37);

    //第二种方式  
    //绑定参数方式  
    char a[200]="bbb";  
    char b[200]="200";  
    SQLINTEGER   p   =   SQL_NTS;  
    //1预编译  
    SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列相同  
    //2绑定参数值  
    SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);  
    SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);  
    //3 执行  
    SQLExecute(hstmt1);  

    printf("操作成功!");  
    //释放语句句柄  
    SQLCloseCursor (hstmt1);  
    SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);  

}     
//3.断开数据源  
/* 
 1.断开与数据源的连接. 
 2.释放连接句柄. 
 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) 
*/  
SQLDisconnect(hdbc1);      
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);     
SQLFreeHandle(SQL_HANDLE_ENV, henv);     
return(0);     

}

这是源代码 ,但我的VS2012里却总出现这样的问题: 无法从“const char [1]”转换为“SQLWCHAR [129]”或者 不能将参数 2 从“SQLCHAR [29]”转换为“SQLWCHAR *”
等等。总之就是SQLCHAR 和 SQLWCHAR 不能兼容的问题 。请问这到底是怎么回事啊?

1个回答

xia4o
xia4o   2015.08.12 16:58

如果不能那是因为VS2012与sql server 2008不兼容情况,需要删除VS2012 express LocalDB即可。
再次,将sql server 配置管理器=》sql server网络配置=》MSSQLSERVER协议=>VIA禁用。
最后,重新启动“sql server服务”就可以连接上本地或远程服务器!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!