C语言连接SQL数据库例子

合集下载

C++连接SQL

C++连接SQL

C++连接SQL数据库第一步系统配置1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。

2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。

否则无法通过系统本身的安全策略。

测试通过就完成了配置。

C++连接SQL数据库第二步 C++与SQL连接初始化1.在你所建立的C++项目中的stdafx.h头文件中引入ADO具体代码如下1.#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得到的一个具体的实例类。

_Connectio nPtr类封装了Connection对象的Idispatch接口指针及其一些必要的操作。

可以通过这个指针操纵Connection对象。

例如连接SQLServer数据库,代码如下:1.//连接到MS SQL Server2.//初始化指针3._ConnectionPtr pMyConnect = NULL;4.HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));5.if (FAILED(hr))6.return;7.//初始化链接参数8._bstr_t strConnect = “Provider=SQLOLEDB;9.Server=hch;10.Database=mytest;11.uid=sa; pwd=sa;”; //Database指你系统中的数据库12.//执行连接13.try15.// Open方法连接字串必须四BSTR或者_bstr_t类型16.pMyConnect->Open(strConnect, “”, “”, NULL);17.}18.catch(_com_error &e)19.{20.MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION);21.}//发生链接错误C++连接SQL数据库第三步简单的数据连接1.//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集2.//初始化过程以下是个实例3._RecordsetPtr pRecordset;4.if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))5.{6.return;7.}8.//执行操作9.try10.{11.pRecordset->Open(_variant_t(”userinfo”),_variant_t((IDispatch*)pMyConnect),12.adOpenKeyset, adLockOptimistic, adCmdTable);13.}14.catch (_com_error &e)15.{16.MessageBox(”无法打开userinfo表\”, “系统提示”,MB_OK|MB_ICONINFORMATION);C++连接SQL数据库第四步执行SQL语句这里是关键,我认为只要你懂点SQL语句那么一切都会方便许多比用上面的方法简单,更有效率点。

sql数据库 c 应用实例

sql数据库 c 应用实例

sql数据库c 应用实例在C语言中与SQL数据库进行交互通常涉及使用某种数据库连接库。

一个常见的库是SQLite,它是一个轻量级的数据库,非常适合嵌入式系统和桌面应用程序。

以下是一个简单的C语言应用程序示例,该程序使用SQLite库来创建一个数据库,插入一些数据,并从中检索数据。

首先,确保你已经安装了SQLite库。

在Linux上,你可以使用包管理器来安装它。

例如,在基于Debian的系统上,你可以运行:shsudo apt-get install libsqlite3-dev接下来,创建一个C文件,例如main.c,并输入以下代码:c#include <stdio.h>#include <sqlite3.h>static int callback(void *data, int argc, char **argv, char **azColName) {int i;for (i = 0; i < argc; i++) {printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");}printf("\n");return 0;}int main(int argc, char *argv[]) {sqlite3 *db;char *zErrMsg = 0;int rc;rc = sqlite3_open(":memory:", &db);if (rc) {fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));return(0);} else {fprintf(stderr, "Opened database successfully\n");}/* 创建表格*/char *sql = "CREATE TABLE Company(""ID INT PRIMARY KEY NOT NULL,""NAME TEXT NOT NULL, ""AGE INT NOT NULL, ""ADDRESS CHAR(50), ""SALARY REAL)";rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);} else {fprintf(stdout, "Table created successfully\n");}/* 插入数据*/sql = "INSERT INTO Company (ID,NAME,AGE,ADDRESS,SALARY) ""VALUES (1, 'Paul', 32, 'California', 20000.00 );";rc = sqlite3_exec(db, sql, 0, 0, &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);} else {fprintf(stdout, "Record inserted successfully\n"); }/* 查询数据*/sql = "SELECT * from Company";rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL error: %s\n", zErrMsg);sqlite3_free(zErrMsg);} else {fprintf(stdout, "Operation done successfully\n"); }sqlite3_close(db);return 0;}这个程序做了以下几件事:它打开了一个在内存中的SQLite数据库(这意味着数据库只在程序运行时存在,程序关闭后数据库将被删除)。

C#连接数据库SQL(2005)

C#连接数据库SQL(2005)

C#连接数据库SQL(2005)⾸先来总结⼀下进⾏数据库编程的全过程,这⾥⽤的是SQL SERVER(1) 建⽴SqlConnection对象以连接数据库SqlConnection mysqlconnection=new SqlConnection("Server=localhost; database=yourdatabase;uid=sa;pwd=sa"); (2) 建⽴SqlCommand对象SqlCommand mysqlcommand=mysqlconnection.CreateCommand();(3) 设置SqlCommand对象的CommandText属性mandText="SELECT * FROM youydatabasetablename";(4) 打开SqlConnection对象mysqlconnection.open();(5) 运⾏SELECT语句SqlDataReader mysqldatareader=mysqlcommand.ExecuteReader();本⼈初学,此处疑惑,还望⾼⼿解答:此处没有SqlDataReader mysqldatareader=new SqlDataReader();⽽是直接执⾏,可以吗?如果没有new创建对象,后⾯的(8)mysqldatareader.Close(); 需要关闭吗?谢谢⾼⼈解答(6) ⽤SqlDataReader对象读⾏mysqldatareader.Read();(7) 显⽰SqlDataReader对象中的数值yourtextbox.Text=mysqldatareader["ID"].ToString(); //ID是你数据库中的⼀项列名(8) 关闭SqlDataReader对象mysqldatareader.Close();本⼈初学,此处疑惑,还望⾼⼿解答:需要关闭mysqlcommand吗即mysqlcommand.Close() 还是因为调⽤了CreateCommand()⽅法⽽不需要关闭吗?(9) 关闭SqlConnection对象mysqlconnection.Close();下⾯把过程呈现出来.1、在我的程序中⽤的是SQL,所以在程序头前加上using System.Data.SqlClient;2、在Form1中加⼊应有的控件,⽤于显⽰数据.3、申请变量static private int m = 1; //显⽰每条记录static private int k; //得到记录条数SqlCommand mysqlcommand;SqlConnection mysqlconnection;4、连接数据库,注意这⾥的连接字符串,⽤的是安全类型.try{mysqlconnection = new SqlConnection("server=localhost;Integrated Security=True;Database=myfriends");mysqlcommand = mysqlconnection.CreateCommand();//得到记录条数mandText = "SELECT COUNT(*) FROM Friends";mysqlconnection.Open();k = (int)mysqlcommand.ExecuteScalar();GetData(1);}catch (SqlException ex){MessageBox.Show("A SqlException was thrown,Number = " +ex.Number + //错误号ex.Message + //错误描述字符串ex.StackTrace); //抛出异常的类名和⽅法名字符串}5、如果数据库中有多条记录就要逐条显⽰在逐条显⽰的按钮事件中:m += 1; //下⼀条索引值if (m > k){MessageBox.Show("最后⼀条!将显⽰第⼀条记录!", "信息提⽰");m = 1;}this.hisname.Text = ""; //要显⽰下条,当然先清空this.hissex.Text = "";this.hisadress.Text = "";this.hisbirthday.Text = "";GetData(m); //显⽰下第数据6、在显⽰数据中⽤到显⽰下⼀条函数;private void GetData(int i){mandText = "SELECT ID,Name,Sex,"+ "birthday,address FROM Friends WHERE ID="+i; SqlDataReader mysqldatareader = mysqlcommand.ExecuteReader();mysqldatareader.Read();this.hisname.Text = mysqldatareader["Name"].ToString();this.hissex.Text = mysqldatareader["Sex"].ToString();this.hisadress.Text = mysqldatareader["Address"].ToString();this.hisbirthday.Text = mysqldatareader["Birthday"].ToString();mysqldatareader.Close();}。

C_与Sqlserver2005数据库的连接方法

C_与Sqlserver2005数据库的连接方法

一. 数据库连接字符串文章由 网提供典型的数据库连接字符串包括:集成验证和混合验证两种模式 集成验证连接字符:Data Source=locolhost; Initial Catalog=数据库名称; Integrated Security=True 混合验证模式字符:Server=localhost;Initial Catalog=数据库名称; Persist Security Info=False; User ID=****; Password=****; 注:1.这里的Data Source 或Server 表示数据源所在的计算机名称或IP 地址,可以互换。

2.Initial Catalog 表示连接的数据库名称,可写为database 3.Integrated Security 表示是否要为集成身份验证4.如果使用的是混合验证,需要提供用户名User ID 和密码Password 字段。

二. 类和对象如下图为 中的基本类,注意不是一个继承表,而是关系表·提供者对象:专用于每一种类型的数据源;专用于提供者的对象完成数据源中实际的读取和写入工作。

·用户对象:将数据读入到内存中后用来访问和操作的数据的对象。

提供者对象需要一个活动的连接,可以使用它们预先读取数据,然后根据需要通过用户对象使用内存中的数据,也可以使用提供者对象更新数据源中的数据,并将改动写回到数据源中。

用户对象以非连接方式使用,甚至在数据库连接关闭之后,也可使用内存中的数据。

1.提供者对象在每一个.NET数据提供者中定义的对象,其名前带有特定提供者的名称。

因此,用于OLE DB 提供者的连接对象就是OleDbConnection;用于提供者的类是SqlConnection。

使用时要分别使用using System.Datat.OleDb;和using System.Data.SqlClient;(1)连接对象连接对象是我们使用的第一个对象,用于任何其它对象之前。

C#连接SQLServer数据库(一)

C#连接SQLServer数据库(一)

C#连接SQLServer数据库(⼀)C#连接数据库:Connection对象1.Connection对象概述 Connection对象是⼀个连接对象,主要功能是建⽴与物理数据库的连接。

其主要包括4种访问数据库的对象类,也可称为数据提供程序,分别介绍如下。

SQL Server数据提供程序,位于System.Data.SqlClient命名空间。

ODBC数据提供程序,位于System.Data.Odbc命名空间。

OLEDB数据提供程序,位于System.Data.OleDb命名空间。

Oracle数据提供程序,位于System.Data.OracleClient命名空间。

说明:根据使⽤数据库的不同,引⼊不同的命名空间,然后通过命名空间中的Connection对象连接类连接数据库。

例如,连接SQL Server数据库,⾸先要通过usingSystem.Data.SqlClient命令引⽤SQL Server数据提供程序,然后才能调⽤空间下的SqlConnection类连接数据库。

2.连接数据库 以SQL Server数据库为例,如果要连接SQL Server数据库,必须使⽤System.Data.SqlClient命名空间下的SqlConnection类。

所以⾸先要通过usingSystem.Data.SqlClient命令引⽤命名空间,连接数据库之后,通过调⽤SqlConnection对象的Open⽅法打开数据库。

通过SqlConnection对象的State属性判断数据库的连接状态。

界⾯:代码: ``` private void btn1_Click(object sender, EventArgs e) { if (txt1.Text == "") { MessageBox.Show("请输⼊要连接的数据库名称!"); } else { try { string connString ="server=.;database=" + txt1.Text.Trim() + ";uid=test;pwd=test;connect timeout=5"; //** SqlConnection sqlConnection = new SqlConnection(connString); //**sqlConnection.Open(); //**if (sqlConnection.State == ConnectionState.Open){lab2.Text = "数据库【" + txt1.Text.Trim() + "】已经连接并打开!";}}catch{MessageBox.Show("数据库连接失败!");}}}##3.关闭连接&emsp;&emsp;<b>当对数据库操作完毕后,要关闭与数据库的连接,释放占⽤的资源。

C连接SQL

C连接SQL
retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);
//2.连接句柄 使用SQLAllocHandle()与SQLConnect函数进行连接
if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {
printf("连接失败!\n");
} else {
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
SQLPrepare(hstmt1,pre_sql,strlen(pre_sql)-1);
//第三个参数(29)与数组大小相同,而不是数据库列相同 ,判断连接是否成功
"insert into Student values('20301','mike','23');"
"insert into Student values('20301','mike','23');"
"insert into Student values('20301','mike','23');"
//释放语句句柄
}
SQLDisconnect(hdbc1);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);
SQLFreeHandle(SQL_HANDLE_ENV, henv);

c++控制台连接sql数据库

c++控制台连接sql数据库

例:创建数据库media 其中有表tb_user 列name、idnum一、连接数据库#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")#pragma comment(lib, "winmm.lib")_ConnectionPtr pConnection;_CommandPtr pCommand;_RecordsetPtr pRecordset;pRecordset.CreateInstance("ADODB.Recordset"); pConnection.CreateInstance("ADODB.Connection"); pCommand.CreateInstance("mand");1、打开数据库(其中用户名密码是安装数据库时设定的)_bstr_t strConnect="Provider=SQLOLEDB;Server=(local);Database=media;uid=sa; pwd=2944028a;";pConnection->Open(strConnect,"","",adModeUnknown);注:如果要连接局域网内其他电脑上的数据库_bstr_t strConnect="Provider=SQLOLEDB;Data Source=192.168.1.119;Database=media;uid=sa; pwd=2944028a;";pConnection->Open(strConnect,"","",adModeUnknown);2、打开表pRecordset->Open("SELECT * FROM tb_user",pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic,adCmdText);二、添加数据Char name[]=”hwm”;Char num[]=”12345”;pRecordset->AddNew(); //添加行pRecordset->PutCollect("name", _variant_t(name)); //写入数据pRecordset->PutCollect("num", _variant_t(num)); pRecordset->Update(); //更新数据库三、更改位置及判断pRecordset->MoveFirst(); //移动到第一行pRecordset->MoveNext(); //移动到下一行pRecordset->BOF //判断表是否为空pRecordset->rsEOF //判断表是否结束四、读取数据if(!pRecordset->BOF) //判断表是否为空pRecordset->MoveFirst();else { cout<<"表内数据为空";return 0; }_variant_t vname,vnum,Char name[30];Char num [30];vname = pRecordset->GetCollect("name");vnum = pRecordset->GetCollect("num");strcpy(name,(LPCSTR)_bstr_t(vname));strcpy(num,(LPCSTR)_bstr_t(vnum));五、修改数据if(!pRecordset->BOF) //判断表是否为空pRecordset->MoveFirst();else { cout<<"表内数据为空";return 0; }pRecordset->MoveNext(); //移动到想要修改的行pRecordset->PutCollect("name", _variant_t(name)); pRecordset->PutCollect("num", _variant_t(num));六、删除数据if(!pRecordset->BOF) //判断表是否为空pRecordset->MoveFirst();else { cout<<"表内数据为空";return 0; }pRecordset->MoveNext(); //移动到想要删除的行pRecordset->Delete(adAffectCurrent); //删除pRecordset->Update();。

C连接SQL数据库

C连接SQL数据库

C # 连接S Q L 2005数据库 学会数据库连接,再会点C# 就可以打打酱酒----某人说的 要想上手快,思路最重要:数据库 ,应用程序,他们是两个不同的对象。

现在我们要他们能够进行相互交换数据,需在在他们两之间建立一条通道。

至于这条通道是怎么建立的 下面有介绍。

第一步,要确定数据库那边连接正常:1. 服务是否开启:运行DOS 窗口:net start mssqlserver2用户是否能够正常登录:如果弹出这些警告信息你可以到这两个地方看看:服务器属性和用户属性先右击属性。

然后把SQL 和windows 身份验证模式 选上。

先右击属性。

看下登录属性是否被禁用,把启用选上。

可能还有一些其他问题,(在DOS 窗口下:sqlservermanager.msc ),看看这里的服务是否启用第二步:/首先,定义连接字符串。

然后,数据库进行连接。

接着,打开数据库。

然后,执行SQL语句。

最后,记得关闭数据库。

在VS2010 编写相应的代码(//引用这个命名空间)//定义连接字符串server=服务器名(.代表本地服务器)string sqlcon = "Server=.;Database=myd;Uid=sa;Pwd=s";//定义查询语句string sqlquery = "select * from Soccer";//用SqlConnection这个对象与数据库进行连接SqlConnection con = new SqlConnection(sqlcon);try{con.Open();//数据库连接之后,打开。

MessageBox.Show("数据库连接成功!")//看数据库是否连接成功}catch(Exception ex){MessageBox.Show(ex.Message);}finally{con.Close();//必须关闭}测试成功数据库简单的增删改查:1>S elect (在窗体中添加dataGridView1 这个控件)a. 查询整个表,并把表里的数据放在dataGridView1里,代码如下:private void Form1_Load(object sender, EventArgs e){string sqlcon = "Server=.;Database=MySchool;Uid=sa;Pwd=sa ";string sqlquery = "select * from Student";DataSet ds = new DataSet();//创建一个数据集,把查询到的数据放在ds里SqlConnection con = new SqlConnection(sqlcon);try{con.Open();SqlDataAdapter sda = new SqlDataAdapter(sqlquery, con);//用sqlDataAdapter 这个对象去与数据库(con)建立一个通道,在这个通道里执行sqlquery这条语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SELECT FIRSTNME INTO :firstname (4)FROM employeeWHERE 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 20002009/11/02 09:34 [sql server]1.提取单条记录db";值比较db";示表格db";etLength()*15;pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);}int i=0;_bstr_t vCol;用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。

step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserverstep2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200))step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,添加->SQL SERVER名称:csql,服务器:HNHJ使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码: 更改默认的数据库为:test...测试数据源,测试成功,即DNS添加成功。

文件完整代码1.据库操作中的添加,修改,删除,主要体现在SQL语句上2. 2.采用直接执行方式和参数预编译执行方式两种3.*/4.int main(){5.RETCODE retcode;6.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",7.szUID[MAXNAME] = "sa",8.szAuthStr[MAXNAME] = "";9.接数据源10.境句柄11.retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);12.retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,13.(SQLPOINTER)SQL_OV_ODBC3,14.SQL_IS_INTEGER);15.接句柄16.retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv,&hdbc1);17.retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);18.建并执行一条或多条SQL语句19./*20. 1.分配一个语句句柄(statement handle)21. 2.创建SQL语句22. 3.执行语句23. 4.销毁语句24.*/25.retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1, &hstmt1);26.开数据源27./*28. 1.断开与数据源的连接.29. 2.释放连接句柄.30. 3.释放环境句柄(如果不再需要在这个环境中作更多连接)31.*/32.SQLDisconnect(hdbc1);33.SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);34.SQLFreeHandle(SQL_HANDLE_ENV, henv);35.return(0);36.}1.件查询,2.直接查询全部2.*/3.int main(){4.RETCODE retcode;5.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",6.szUID[MAXNAME] = "sa",7.szAuthStr[MAXNAME] = "";8.UCHAR sql1[39] = "select b from test where a = 'aaa'";9.UCHAR sql2[35] = "select b from test where a = ?";10.UCHAR sql3[19] = "select b from test";11.12.retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);13.retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,14.(SQLPOINTER)SQL_OV_ODBC3,15.SQL_IS_INTEGER);16.retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv,&hdbc1);17.接数据源18.retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);19.if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {20.printf("连接失败!");21.} else {22.建并执行一条或多条SQL语句23./*24. 1.分配一个语句句柄(statement handle)25. 2.创建SQL语句26. 3.执行语句27. 4.销毁语句28.*/29.retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1, &hstmt1);30.编译31.SQLPrepare(hstmt1,sql2,35); 定参数值32.SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);33.行34.SQLExecute(hstmt1);35.char list[5];36.SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);37.SQLFetch(hstmt1);38.printf("%s\n",list);39.*/40.41.认一个结果集是否可用。

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

43. 3.取得行44.*/45.查结果记录(如果有的话)46.SQLExecDirect (hstmt1,sql3,19);47.char list[5];48.SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);49.do{50.retcode = SQLFetch(hstmt1);51.if(retcode == SQL_NO_DATA){52.break;53.}54.printf("%s\n",list);55.}while(1);56.57.开数据源58./*59. 1.断开与数据源的连接.60. 2.释放连接句柄.61. 3.释放环境句柄(如果不再需要在这个环境中作更多连接)62.*/63.SQLDisconnect(hdbc1);64.SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);65.SQLFreeHandle(SQL_HANDLE_ENV, henv);66.return(0);67.}创建数据源的过程代码:#include<>#inlcude<>#include<>#include<>#include<>#include<>#define SNO_LEN 30#define NAME_LEN 50#define DEPART_LEN 100#define SSEX_LEN 5int 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_ODBC3,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(SQLPOINTER) 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,SAGE,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,&cbNam e);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,&cbD epart);}/*执行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<serverhdbc); SQLFreeHanlde(SQL_HANDLE_ENV,serverhenv); return 0;}。

相关文档
最新文档