C言語とSQL SERVERデータベース
5631 ワード
1.C言語でSQL SERVERデータベースを操作し、ODBCオープンデータベース接続でデータの追加、修正、削除、クエリーなどの操作を行う.Step 1:SQLSERVERサービスを開始します.たとえば、HNHJ、スタートメニュー->実行->net start mssqlserver step 2:エンタープライズマネージャを開き、データベースtestを確立し、testライブラリでtestテーブル(a varchar(200)、b varchar(200))step 3:システムDSNを確立し、スタートメニュー->実行->odbcad 32、追加->SQL SERVER名:csql、サーバ:HNHJユーザーがログインIDとパスワードを使用してSQLSERVER検証を行い、ログインID:sa、パスワード:デフォルトのデータベースを変更:test...データソースをテストし、テストに成功し、DNSの追加に成功しました.
2.cppファイルの完全なコード
//##########################save.cpp##########################
//##########################list.cpp##########################
3.まとめ:ODBCデータベースの操作はJDBCステップと同様で、融通して学ぶことができる.
2.cppファイルの完全なコード
//##########################save.cpp##########################
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
/*
cpp :
1. , , , SQL
2.
*/
int main(){
RETCODE retcode;
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "";
//SQL
// SQL
UCHAR sql[37] = "insert into test values('aaa','100')";
// SQL
UCHAR 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(" !
");
} 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);
}
//##########################list.cpp##########################
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>
#include <odbcss.h>
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
/*
SQLSERVER ,1. ,2.
*/
int main(){
RETCODE retcode;
UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",
szUID[MAXNAME] = "sa",
szAuthStr[MAXNAME] = "";
UCHAR sql1[39] = "select b from test where a = 'aaa'";
UCHAR sql2[35] = "select b from test where a = ? ";
UCHAR sql3[19] = "select b from test";
retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,
SQL_IS_INTEGER);
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
//1.
retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf(" !");
} else {
//2. SQL
/*
1. (statement handle)
2. SQL
3.
4.
*/
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
//
/*
//
SQLExecDirect (hstmt1,sql1,39);
char list[5];
SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
SQLFetch(hstmt1);
printf("%s
",list);
*/
//
/*
//
char a[200]="aaa";
SQLINTEGER p = SQL_NTS;
//1.
SQLPrepare(hstmt1,sql2,35); // ,
//2.
SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);
//3.
SQLExecute(hstmt1);
char list[5];
SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
SQLFetch(hstmt1);
printf("%s
",list);
*/
//
/*
1. 。
2. 。
3.
*/
//3. ( )
SQLExecDirect (hstmt1,sql3,19);
char list[5];
SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);
do{
retcode = SQLFetch(hstmt1);
if(retcode == SQL_NO_DATA){
break;
}
printf("%s
",list);
}while(1);
//
SQLCloseCursor (hstmt1);
SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);
}
//4.
/*
1. .
2. .
3. ( )
*/
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return(0);
}
3.まとめ:ODBCデータベースの操作はJDBCステップと同様で、融通して学ぶことができる.