C语言连接SQL数据库

C语言连接SQL数据库
C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。

#include

#include

#include

#include "util.h"

#include

EXEC SQL INCLUDE SQLCA; (1)

main()

{

EXEC SQL BEGIN DECLARE SECTION; (2)

char firstname[13];

char userid[9];

char passwd[19];

EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO sample; (3)

EXEC SQL SELECT FIRSTNME INTO :firstname (4)

FROM employee

WHERE LASTNAME = 'JOHNSON';(4)

printf( "First name = %s\n", firstname );

EXEC SQL CONNECT RESET; (5)

return 0;

}

上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分:

(1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。

(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。

(4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME 查出,并将它放在firstnam e变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。

(5)最后断开数据库的连接。

从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。

c语言用vc连接sql server 2000

2009/11/02 09:34[sql server ]

1.提取单条记录

//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \

//no_namespace,rename("EOF","adoEOF"),named_guids

CoInitialize(NULL);

_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial

Catalog=myDataBase;User Id=myUsername;Password=myPassword;"

_ConnectionPtr m_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

_RecordsetPtr m_pSet(_uuid(Recordset));

try {

m_pSet->Open(%%1,m_pConnection.GetInterfacePtr()

adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error *e){

{

AfxMessageBox(e->ErrorMessage());

return;

}

_variant_t var;

CString %%2="";

long fldc=m_pSet->GetFields()->GetCount();

long i=0;

try {

m_pSet->MoveFirst();

if(!m_pSet->adoEOF)

{

for(i=0;i

{

var=m_pSet->GetCollect((long)i);

var.ChangeType(VT_BSTR);

%%2+=var.bstrVal;

%%2+=" ";

}

//m_pSet->MoveNext();

}

}

catch(_com_error *e){

AfxMessageBox(e->ErrorMessage());

delete e;

}

//m_pSet->MoveFirst();

CoUninitialize(NULL);

2.单值比较

//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \

//no_namespace,rename("EOF","adoEOF"),named_guids

CoInitialize(NULL);

_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial

Catalog=myDataBase;User Id=myUsername;Password=myPassword;"

_ConnectionPtr m_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

_RecordsetPtr m_pSet(_uuid(Recordset));

try {

m_pSet->Open(%%1,m_pConnection.GetInterfacePtr()

adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error *e){

{

AfxMessageBox(e->ErrorMessage());

return;

}

_variant_t var;

try {

m_pSet->MoveFirst();

if(!m_pSet->adoEOF)

{

var=m_pSet->GetCollect((long)0);

var.ChangeType(VT_I2);

int %%3=var.intVal;

if(%%3==%%4)

{

%%5

}

//m_pSet->MoveNext();

}

catch(_com_error *e){

AfxMessageBox(e->ErrorMessage());

delete e;

}

//m_pSet->MoveFirst();

CoUninitialize(NULL);

3.显示表格

//#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \

//no_namespace,rename("EOF","adoEOF"),named_guids

CoInitialize(NULL);

_bstr_t varSource="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb"; //_bstr_t varSource="Data Source=myServerAddress;Initial

Catalog=myDataBase;User Id=myUsername;Password=myPassword;"

_ConnectionPtr m_pConnection(_uuidof(Connection));

m_pConnection->Open(varSource,"","",adModeUnknow);

//打开属性为默认(adModeRead(只读),adModeWrite(可写),adModeReadWrite(可读写)等)

_RecordsetPtr m_pSet(_uuid(Recordset));

try {

HRESULT hr=m_pSet->Open(%%1,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);

}

catch(_com_error *e){

AfxMessageBox(e->ErrorMessage());

}

if(SUCCESSED(hr))

{

//表打开成功

}

FieldsPtr p_fields=m_pSet->Fields;

FieldPtr p_field;

_variant_t var_index;

LPCSTR field_name;

int index=0;

_bstr_t bstr_field_name;

int countfields=p_fields->GetCount();

CString *Column=new CString[countfields];

CListCtrl *pList=(CListCtrl*)GetDlgItem(%%1);//IDC_LIST_TABLEDATA VERIFY(pList);

pList->DeleteAllItems();

for(index=0;index

{

var_index.vt=VT_I4;

var_index.IVal=index;

p_field=p_fields->Item[var_index];

bstr_field_name=p_field->GetName();

field_name=(LPCSTR)bstr_field_name;

Column[index]=field_name;

int ColumnWidth=Column[index].GetLength()*15;

pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);

}

int i=0;

_bstr_t vCol;

//pList->SetTextBkColor(RGB(122,200,122));

//pList->SetTextColor(RGB(0,0,200));

while(!m_pSet->adoEOF)

{

pList->Insert(i,atoi(i));

for(int j=0;j

{

vCol=m_pSet->GetCollect((long)j);

pList->SetItemText(i,j,vCol);

}

m_pSet->MoveNext();

i++;

}

CoUninitialize(NULL);

C语言与SQL SERVER数据库

1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。

step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver

step2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200))

step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,

添加->SQL SERVER

名称:csql,服务器:HNHJ

使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码:

更改默认的数据库为:test

...

测试数据源,测试成功,即DNS添加成功。

2.cpp文件完整代码

//##########################save.cpp##########################

C代码

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

7.#include

8.

9.SQLHENV henv = SQL_NULL_HENV;

10.SQLHDBC hdbc1 = SQL_NULL_HDBC;

11.SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

12.

13./*

14. cpp文件功能说明:

15. 1.数据库操作中的添加,修改,删除,主要体现在SQL语句上

16. 2.采用直接执行方式和参数预编译执行方式两种

17.*/

18.int main(){

19. RETCODE retcode;

20.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",

21. szUID[MAXNAME] = "sa",

22. szAuthStr[MAXNAME] = "";

23. //SQL语句

24. //直接SQL语句

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

26. //预编译SQL语句

27.UCHAR pre_sql[29] = "insert into test values(?,?)";

28. //1.连接数据源

29. //1.环境句柄

30. retcode = SQLAlloc Handle (SQL_HANDLE_ENV, NULL, &henv);

31. retcode = SQLSetEnvAttr(henv, SQL_A TTR_ODBC_VERSION,

32. (SQLPOINTER)SQL_OV_ODBC3,

33. SQL_IS_INTEGER);

34. //2.连接句柄

35. retcode = SQLAlloc Handle(SQL_HANDLE_DBC, henv, &hdbc1);

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

37. //判断连接是否成功

38. if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_I

NFO) ) {

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

40. } else {

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

42. /*

43. 1.分配一个语句句柄(statement handle)

44. 2.创建SQL语句

45. 3.执行语句

46. 4.销毁语句

47. */

48. retcode = SQLAlloc Handle(SQL_HANDLE_STMT, hdbc1, &hstmt1);

49. //第一种方式

50. //直接执行

51. //添加操作

52. //SQLExecDirect (hstmt1,sql,37);

53.

54. //第二种方式

55. //绑定参数方式

56.char a[200]="bbb";

57.char b[200]="200";

58. SQLINTEGER p = SQL_NTS;

59. //1预编译

60. SQLPrepare(hstmt1,pre_sql,29); //第三个参数与数组大小相同,而不是数据库列

相同

61. //2绑定参数值

62. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&a,0,&p);

63. SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&b,0,&p);

64. //3 执行

65. SQLExecute(hstmt1);

66.

67. printf("操作成功!");

68. //释放语句句柄

69. SQLCloseCursor (hstmt1);

70. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);

71.

72. }

73. //3.断开数据源

74. /*

75. 1.断开与数据源的连接.

76. 2.释放连接句柄.

77. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)

78. */

79. SQLDisconnect(hdbc1);

80. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);

81. SQLFreeHandle(SQL_HANDLE_ENV, henv);

82. return(0);

83.}

//##########################list.cpp##########################

C代码

1.#include

2.#include

3.#include

4.#include

5.#include

6.#include

7.#include

8.

9.SQLHENV henv = SQL_NULL_HENV;

10.SQLHDBC hdbc1 = SQL_NULL_HDBC;

11.SQLHSTMT hstmt1 = SQL_NULL_HSTMT;

12.

13./*

14.查询SQLSERVER数据库,1.条件查询,2.直接查询全部

15.*/

16.int main(){

17. RETCODE retcode;

18.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",

19. szUID[MAXNAME] = "sa",

20. szAuthStr[MAXNAME] = "";

21.UCHAR sql1[39] = "select b from test where a = 'aaa'";

22.UCHAR sql2[35] = "select b from test where a = ? ";

23.UCHAR sql3[19] = "select b from test";

24.

25. retcode = SQLAlloc Handle (SQL_HANDLE_ENV, NULL, &henv);

26. retcode = SQLSetEnvAttr(henv, SQL_A TTR_ODBC_VERSION,

27. (SQLPOINTER)SQL_OV_ODBC3,

28. SQL_IS_INTEGER);

29. retcode = SQLAlloc Handle(SQL_HANDLE_DBC, henv, &hdbc1);

30. //1.连接数据源

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

32. if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_I

NFO) ) {

33. printf("连接失败!");

34. } else {

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

36. /*

37. 1.分配一个语句句柄(statement handle)

38. 2.创建SQL语句

39. 3.执行语句

40. 4.销毁语句

41. */

42. retcode = SQLAlloc Handle(SQL_HANDLE_STMT, hdbc1, &hstmt1);

43. //第一种方式

44. /*

45. //直接执行

46. SQLExecDirect (hstmt1,sql1,39);

47. char list[5];

48. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);

49. SQLFetch(hstmt1);

50. printf("%s\n",list);

51. */

52.

53. //第二种方式

54. /*

55. //绑定参数方式

56. char a[200]="aaa";

57. SQLINTEGER p = SQL_NTS;

58. //1.预编译

59. SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不是数据库列相

60. //2.绑定参数值

61. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&a,0,&p);

62. //3.执行

63. SQLExecute(hstmt1);

64. char list[5];

65. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);

66. SQLFetch(hstmt1);

67. printf("%s\n",list);

68. */

69.

70. //第三种方式全部输出

71. /*

72. 1.确认一个结果集是否可用。

73. 2.将结果集的列绑定在适当的变量上。

74. 3.取得行

75. */

76. //3.检查结果记录(如果有的话)

77. SQLExecDirect (hstmt1,sql3,19);

78.char list[5];

79. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);

80. do{

81. retcode = SQLFetch(hstmt1);

82. if(retcode == SQL_NO_DA TA){

83. break;

84. }

85. printf("%s\n",list);

86. }while(1);

87.

88. //释放语句句柄

89. SQLCloseCursor (hstmt1);

90. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);

91.

92. }

93.

94. //4.断开数据源

95. /*

96. 1.断开与数据源的连接.

97. 2.释放连接句柄.

98. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)

99. */

100. SQLDisconnect(hdbc1);

101. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);

102. SQLFreeHandle(SQL_HANDLE_ENV, henv);

103. return(0);

104.}

创建数据源的过程代码:

#include

#inlcude

#include

#include

#include

#include

#define SNO_LEN 30

#define NAME_LEN 50

#define DEPART_LEN 100

#define SSEX_LEN 5

int main()

{

/*Step 1 定义句柄和变量*/

//以king开头的表示的是连接KingbaseES的变量

//以server开头的表示的是连接SQLSERVER的变量

SQLHENV kinghenv,serverhenv;

SQLHDBC kinghdbc,serverhdbc;

SQLHSTMT kinghstmt,serverhstmt;

SQLRETURN ret;

SQLCHAR sName[NAME_LEN],sDepart[DEPART_LEN],

sSex[SSEX_LEN],sSno[SNO_LEN];

SQLINTEGER sAge;

SQLINTEGRR cbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,

cbName=SQL_NTS,cbDepart=SQL_NTS;

/*Step 2 初始化环境*/

ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv); ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&setverhenv); ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_O DBC3,0);

ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ ODBC3,0);

/*Step 3 建立连接*/

ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc);

ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);

ret=SQLConnect(kinghdbc,"KingbaseES ODBC",SQL_NTS,"SYSTEM", SQL_NTS,"MANAGER",SQL_NTS);

if(!SQL_SUCCEEDED(ret))

return -1; //连接失败时返回错误值;

ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,"sa",

SQL_NTS,"sa",SQL_NTS);

if(!SQL_SUCCEEDED(ret))

return -1; //连接失败时返回错误值;

/*Step 4 初始化语句句柄*/

ret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt);

ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE(SQLPOINTE R) SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);

ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);

/*Step 5 两种方式执行语句*/

/*预编译带有参数的语句*/

ret=SQLPrepare(sercerhstmt,"INSERT INTO STUDENT(SNO,SNAME,SSEX,SA GE,SDEPT)

VALUES(?,?,?,?,?)",SQL_NTS);

if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)

{

ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,SNO_LEN,0,sSno,0,&cbSNO);

ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,SNAME_LEN,0,sName,0,&cbName);

ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,2,0,sSex,0,&cbSex);

ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG, SQL_INTEGER,0,0,&sAge,0,&cbAge);

ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);

}

/*执行SQL语句*/

ret=SQLExecDirect(kinghstmt,"SELECT * FROM STUDENT",SQL_NTS);

if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO)

{

ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&cbSno);

ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&cbName);

ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&cbSex);

ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,&sAge,0,&cbAge);

ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&cbDepart); }

/*Step 6 处理结果集并执行预编译后的语句*/

while((ret=SQLFetch(kinghstmt))!=SQL_NO_DATA_FOUND)

{

if(ret==SQL_ERROR) printf("Fetch error\n");

else ret=SQLExecute(serverhstmt);

}

/*Step 7 中止处理*/

SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt);

SQLDisconnect(kinghdbc);

SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);

SQLFreeHandle(SQL_HANDLE_ENV,kinghenv);

SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);

SQLDisconnect(serverhdbc);

SQLFreeHanlde(SQL_HANDLE_DBC

SQLFreeHanlde(SQL_HANDLE_ENV,serverhenv);

return 0;

}

c语言连接数据库mysql

下面是C语言连接mysql数据库简单例子: 编译方式: gcc -I /usr/local/mysql/include/ -L /usr/local/mysql/lib/ -l mysqlclient select.c -o select 源码: #include #include #include #include "/usr/local/mysql/include/mysql.h" int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.1.99"; char *user = "test"; char *password = "test_passwd"; char *database = "count"; double tvalue1 = 0.93; char st[123]; time_t s; s = time((time_t*)NULL ); sprintf(st, "%d", s); conn = mysql_init(NULL); if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } char sql[1024]="SELECT * FROM money_change WHERE c_datetime <= "; strcat(sql,st); strcat(sql,"-3000 AND c_datetime > "); strcat(sql,st); strcat(sql,"-5000 AND c_type = 0 UNION ALL SELECT * FROM money_change WHERE

C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON得FIRSTNAME信息。 #include <stdio、h> #include <stdlib、h> #include <string、h>? #include "util、h" #include <sqlca、h> ?EXECSQL INCLUD E SQLCA; (1) main() ?{ ? EXEC SQL BEGIN DECLAR E SECTION; (2) char firstname[13]; ? char useri d[9];? char passwd[19]; EXEC SQL END DECLARE SECTION; ? EXE C SQLCONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee ?WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstnam e ); EXEC SQLCONNECT RESET; (5)? retur n0; }?上面就是一个简单得静态嵌入SQL语句得应用程序。它包括了嵌入SQL得主要部分: (1)中得include SQLCA语句定义并描述了SQLCA得结构。SQLCA 用于应用程序与数据库之间得通讯,其中得SQLCODE返回SQL语句执行后得结果状态。? (2)在BEGINDECLARE SECTION与EN D DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中得数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询得结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)就是一条选择语句。它将表employee中得LASTNAME为“JOHNSON”得行数据得FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert与delete语句。? (5)最后断开数据库得连接。 从上例瞧出,每条嵌入式SQL语句都用EXEC SQL开始,表明它就是一条SQL语句。这也就是告诉预编译器在EXEC SQL与“;”之间就是嵌入SQL 语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 C语言与SQL SERVER数据库

数据库课实验 使用C语言操作SQL SERVER 数据库

实验4使用C语言操作SQL Server数据库 1.实验目的与要求: 1.1配置SQL Server ODBC数据源 1.2C语言与SQL Server2005数据库连接 1.3使用C语言操作SQL Server数据库 2.实验环境与实验器材: 计算机,网络环境,投影设备。 实验相关软件:Window xp、PowerDesigner、SQL Server2008。 3.实验内容与步骤 3.1配置SQL Server ODBC数据源 3.2创建students数据库,并在其中创建表student、course、sc,要求如下: student sno sname ssex sage sdept 0611101李勇男21计算机系0611102刘晨男20计算机系0611103王敏女20计算机系0611104张小红女19计算机系0621101张立男20信息管理系0621102吴宾女19信息管理系0621103张海男20信息管理系0631101钱小平女21通信工程系0631102王大力男20通信工程系0631103张姗姗女19通信工程系

Course sc 3.3 编写C 程序,在C 程序中完成对SQL Server 数据库的操作,要求如下: 1).查询计算机系的男生姓名和年龄 2).查询每个学生的选课门数和平均成绩,并按照平均成绩的降序显示结果。3).查询成绩在80分以上的学生姓名、课程名和成绩,并按成绩的降序排列;4).查询哪些课程没有人选,要求列出课程号和课程名; 5). 查询有考试成绩的所有学生的姓名、课程名和成绩,要求将查询结果保存到一张新 cno cname credit semster c001高等数学41c002大学英语31c003大学英语32c004计算机文化学22c005VB 23c006数据库基础45c007数据结构44c008 计算机网络 4 4 sno cno grade 0611101c001960611101c002800611101c003840611101c005620611102c001920611102c002900611102c004840621102c001760621102c004850621102c005730621102c007NULL 0621103c001500621103c004800631101c001500631101c004800631102c007NULL 0631103c004780631103c005650631103 c007 NULL

C语言连接SQL数据库

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。#include #include #include #include "util.h" #include EXEC SQL INCLUDE SQLCA; (1) main() { EXEC SQL BEGIN DECLARE SECTION; (2) char firstname[13]; char userid[9]; char passwd[19]; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON';(4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; }

上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。(5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL 语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。 C语言与SQL SERVER数据库

C语言连接数据库的代码

附一源码 CWinApp theApp; using namespace std; CHmbAdoDBRs RfRst; CString sSql; CString seq, body, eng, tm, tl, icol, ecol, alc, bhmcdate; int i; BOOL DbOpen(); BOOL CkseqtmpSelect(); BOOL CkseqtmpUpdate(); int PrintStatus(); int SockInit(); CHmbAdoDB Sqldb; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int cnt = 0; int nRetCode = 0; int page = 1; int prt_ret; CString strDate, strTime; // initialize MFC and print and error on failure if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: change error code to suit your needs cerr << _T("Fatal Error: MFC initialization failed") << endl; nRetCode = 1; } //DataBase Open... if(DbOpen()) cout << "DataBase Open Open Ok" << endl; else { cout << "DataBase Open Error\n" << endl; return -1; } while( 1 ) { ret = SockInit(); //建立socket连接 if ( ret < 0 ) Sleep(3000); else break;

C连接MYSQL数据库的3种方法及示例

C# 连接MYSQL数据库的方法及示例 连接MYSQL数据库的方法及示例 方法一: using MySql、Data using MySql、Data、MySqlClient; 其她操作跟SQL就是差不多,无非就就是前缀变成MySql了、 补充: 下面就是连接字符串,供参考、 MySqlConnection con = new MySql、Data、MySqlClient、 MySqlConnection("Database='testdb';Data Source='localhost';User Id='db';Password='apple';charset='utf8'"); con、Open(); MySqlCommand cmd = new MySqlCommand(); cmd、Connection = con; 使用MYSQL推出的MySQL Connector/Net is an ADO、NET driver for MySQL 该组件为MYSQL为ADO、NET访问MYSQL数据库设计的、NET访问组件。 安装完成该组件后,引用命名空间MySql、Data、MySqlClient; 使用命令行编译时:csc /r:MySql、Data、dll test、cs 方法二: 通过ODBC访问MYSQL数据库 访问前要先下载两个组件:odbc、net与MYSQL的ODBC驱动(MySQL Connector/ODBC (MyODBC) driver)目前为3、51版 安装完成后,即可通过ODBC访问MYSQL数据库 方法三: 使用CoreLab推出的MYSQL访问组件,面向、NET 安装完成后,引用命名空间:CoreLab、MySql; 使用命令编译时:csc /r:CoreLab、MySql、dll test、cs 以下为访问MYSQL数据库实例 编译指令:csc /r:CoreLab、MySql、dll /r:MySql、Data、dll test、cs using System; using System、Net; using System、Text; using CoreLab、MySql; using System、Data、Odbc; using MySql、Data、MySqlClient; class ConnectMySql {

c语言连接数据库

使用C语言操作MySQL数据库 1.连接数据库。 从C语言连接MySQL数据库包含两个步骤: a)初始化连接句柄结构; b)实际创建连接。 首先使用mysql_init初始化连接句柄: MYSQL * mysql_init (MYSQL *); 通常传递一个空指针给mysql_init这个函数,它会返回一个指向新分配的连接句柄结构的指针。 如果传递一个已有的结构,他将被重新初始化。如果出错,返回NULL。 初始化成功后,则使用mysql_real_connect来创建一个实际的连接: MYSQL * mysql_real_connect(MYSQL * connection, const char * server_host, const char * sql_user_name, const char * sql_password, const char *db_name, unsigned int port_number, const char * unix_socket_name, unsigned int flags

); connection必须是已经初始化的连接句柄结构,server_host可以是主机名,也可以是IP地址,如果仅仅连接到本机, 可以使用localhost来优化连接类型。port_number和unix_socket_name应该分别为0和NULL,除非改变了MYSQL安装的默认设置。 如果无法连接,返回NULL。完成连接后,在程序正常退出前,应该使用mysql_close关闭这个连接句柄。 void mysql_close(MYSQL * connection); 现在我们试图调用以上函数来建立一个对以上已经建好的数据库的访问,程序为connect1.c。内容如下: #include #include #include "mysql.h" int main (int argc, char *argv[]) { MYSQL *conn_ptr; conn_ptr=mysql_init(NULL); //连接初始化 if(!conn_ptr){ fprintf(stderr, "mysql_init failed\n"); return EXIT_FAILURE;

C语言中数据库接口的设计与实现

Computer Science and Application 计算机科学与应用, 2019, 9(8), 1554-1560 Published Online August 2019 in Hans. https://www.360docs.net/doc/be1014323.html,/journal/csa https://https://www.360docs.net/doc/be1014323.html,/10.12677/csa.2019.98174 Design and Implementation of Database Interface in C Language Ping Wang Fuzhou University of International Studies and Trade, Fuzhou Fujian Received: July 28th, 2019; accepted: August 12th, 2019; published: August 19th, 2019 Abstract After explaining the characteristics of C language and the importance of database technology, this paper introduces the Union and extensiveness of the two technologies in the application of equipment process control. It focuses on the detailed analysis of the database interface technology encountered in the system development, and shows its application field from one side through an example. Keywords C Language, Database, Interface Technology, Development and Application C语言中数据库接口的设计与实现 王平 福州外语外贸学院,福建福州 收稿日期:2019年7月28日;录用日期:2019年8月12日;发布日期:2019年8月19日 摘要 本文在阐述C语言的特点以及数据库技术的重要性之后,简述了二者在设备过程控制应用中的结合性和广泛性,着重就系统开发中碰到的数据库的接口技术进行详细解析,并通过一个示例从一个侧面展示了其应用领域。 关键词 C语言,数据库,接口技术,开发应用

C操作数据库

如果一个ODBC API函数执行成功,则返回SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,SQL_SUCCESS指示可通过诊断记录获取有关操作的详细信息,SQL_SUCCESS_WITH_INFO 指示应用程序执行结果带有警告信息,可通过诊断记录获取详细信息。如果函数调用失败,返回码为SQL_ERROR。 1. SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv); 1. 初始化环境变量 在CLI中有三个句柄,分别是环境句柄、连接句柄、语句句柄。在初始化过程中首先要对前两个句柄逐一进行获取,获取成功后可连接数据库并获取第三个句柄。 SQLRETURN ret; SQLHENV henv; // 环境句柄 SQLHDBC hdbc; // 连接句柄 SQLHSTMT hstmt; // 语句句柄 SQLCHAR DBNAME[]="SAMPLE"; //数据库名 SQLCHAR USERNAME[]="db2admin"; // 用户名 SQLCHAR PSW[]="ibmdb2"; // 口令 ret=SQLAllocEnv(&&henv) //分配环境句柄 ret=SQLAllocConnect(henv,&&hdbc) //分配连接句柄 ret=SQLSetConnectOption(hdbc,SQL_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF) //设置连接属性 ret=SQLConnect(hdbc,DBNAME,SQL_NTS,USERNAME,SQL_NTS,PSW,SQL_NTS) //连接数据库 ret=SQLAllocStmt(hdbc,&&hstmt) //分配语句句柄 上面的每个函数都有返回值,如果函数成功,ret值为SQL_SUCCESS,否则将返回错误代码。

C语言连接MySQL数据库

C语言连接MySQL数据库收藏 前几天公司让我做C语言和MySQL数据库的交互操作,费了九牛二虎之力之后总算做出来了,今天特地把源代码贴出来供大家学习;如有人想要打包项目可以加我QQ260990509,注明技术交流,即可获得打包之后的项目! #if defined(_WIN32) || defined(_WIN64) //为了支持windows平台上的编译 #include #endif #include #include #include "mysql.h" #include #include #include MYSQL mysql,*sock; //定义数据库连接的句柄,它被用于几乎所有的MySQL函数 MYSQL_RES *res; //查询结果集,结构类型 MYSQL_FIELD *fd ; //包含字段信息的结构 MYSQL_ROW row ; //存放一行查询结果的字符串数组 char qbuf[300]; //存放查询sql语句字符串 //定义数据库操作的宏,也可以不定义留着后面直接写进代码 #define MAX_STRING_LENGTH 256 //定义元素个数 #define MAX_ELEMENT_LENGTH 33 //定义显示的列数 #define ELEMENTS_PER_LINE 15 typedef struct { char line[MAX_STRING_LENGTH]; char data[ELEMENTS_PER_LINE][MAX_ELEMENT_LENGTH]; }DATA; void main() { //申明数据库操作函数 int insertData(DATA parameter); //打开指定文件 FILE *fp=fopen("E:\\file.txt","r"); //创建结构体类型实体 DATA data; memset(&data, 0x00, sizeof(DATA)); //得到一行数据 fgets(data.line, MAX_STRING_LENGTH, fp);

C与SQL数据库学生成绩管理系统完整代码

数据库技术及应用项目设 计报告 学生成绩管理系统 姓名:Celia Yan 2015-01-07

一.设计目的及意义 在如今的高校日常管理中,学生成绩管理系统是其中非常重要的一环,特别是当前学校规模不断扩大,学生人数日益增加,课程门类多,校区分散等实际情况,学生成绩统计功能越来越繁重,稍有疏忽就会出现差错。因此,学生成绩管理系统更具有非常大的实际应用意义。在互联网快速崛起的今天,改革传统的手工录入方式,公正,准确,及时反映学生的信息和成绩的情况,以适应信息时代的要求,是学生成绩管理系统的一个新的理念。通过成绩管理可以大大提高学校的工作效率。学生成绩管理系统应该完成以下两个方面的内容:学生档案资料的管理、学生成绩的管理。通过学生成绩管理系统可以做到信息的规范管理,科学统计和快速查询、修改、增加、删除等,减少管理方面的工作量。 二.主要功能 该系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改、增加、删除,另外还考虑到用户登录的权限,针对学生信息和权限登录的学生成绩管理系统。 本系统主要包括注册管理、教师管理、学生信息查询、添加、修改、删除等部分。其主要功能有: (1)学生信息的添加,包括输入学生基本信息和成绩。 (2)学生信息的查询,包括查询学生的基本信息和成绩。 (3)学生信息的修改,包括修改学生基本信息和成绩。 (4)学生信息的删除,包括删除学生基本信息和成绩。 (5)登录用户密码修改,用户登录到系统可进行相应的用户密码修改。 (6)管理员用户对用户名的管理,包括添加新用户、删除用户。 学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性

linux下C语言连接mysql数据库

/* * 需先安装mysqlclient库 * linux下C语言连接mysql的样例 * */ #include #include #include void create(MYSQL *conn_ptr) { int ret; ret = mysql_query(conn_ptr,"create table tl(ID INT,name CHAR(5),birthday DATE,primary key(ID)) "); if (ret) { fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { printf("Create correct!\n"); } } void insert(MYSQL *conn_ptr) { int ret; ret = mysql_query(conn_ptr,"insert into tl(ID,name,birthday) values(10000,'lv','1989-02-09')"); if (ret) { fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { printf("Insert correct!\n"); } } void output(MYSQL *conn_ptr) {

//函数返回状态 int ret = 0; //查询结果集 MYSQL_RES *res = NULL; //1行数据的"类型安全"表示,为计数字节、字符串的数组 MYSQL_ROW row = NULL; //包含字段的相关信息,如字段名,类型和大小等 MYSQL_FIELD *field; //向服务器发送执行语句 ret = mysql_query(conn_ptr,"select * from tl"); if (ret) { //输出错误信息 fprintf(stderr,"error: %s\n",mysql_error(conn_ptr)); } else { //客户端处理结果集的2种方式之一:一次性的检索整个结果集 res = mysql_store_result(conn_ptr); if (res) { //结果集的字段数 int colNum = mysql_num_fields(res); //获取结果集的下一个字段的相关信息 while ( field = mysql_fetch_field(res) ) { //字段名,如果用AS子句为该字段指定了别名,名称的值也是别名 printf("field_name: %s\n",field->name); //原始字段名,忽略别名 printf("field_org_name: %s\n",field->org_name); //包含该字段的表名,如果用AS子句为该表指定了别名,名称的值也是别名 printf("table_name: %s\n",field->table); //包含该字段的原始表名,忽略别名 printf("table_ord_name: %s\n",field->org_table); //该字段类型所支持的最大长度 printf("the max length of this field: %lu\n",field->length); //该字段当前数据中存在的最大长度 printf("the max length of this field in real: %lu\n",field->max_length); //用于该字段的不同"位标志"。如:不能为NULL,主键、唯一键等等

C语言连接SQL数据库例子

连接至U SAMPLE 数据库,查询LASTNAME 为JOHNSON 的FIRSTNAME 信息 #include #include #include { EXEC SQL BEGIN DECLARE SECTION; (2) char firstname[13]; | char userid[9]; | char passwd[19]; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee WHERE LASTNAME = 'JOHNSON'; (4) printf( "First name = %s\n", firstname ); EXEC SQL CONNECT RESET; (5) return 0; } 上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1 )中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2 )在BEGIN DECLARE SECTION 和END DECLARE SECTION 之间定义了宿主变量。宿主变量可被SQL 语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有:”标志以示区别。 (3 )在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据 库实例已经启动。 (4 )是一条选择语句。它将表employee 中的LASTNAME 为“ JOHNSON”的行数据的FIRSTNAME 查出,并将它放在firstname 变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert 和delete 语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”。 c 语言用vc 连接sql server 2000 2009/11/02 09:34 [sql server ] 时分享|

相关主题
相关文档
最新文档