c语言读取mysql库中的数据的程序头文件怎么设置

c语言读取mysql库中的数据的程序头文件怎么设置,第1张

Mysql C API编程步骤

1、首先我们要包含mysql的头文件,并链接mysql动态库。即添加以下语句:

#include <WinSock2.h>// 进行网络编程需要winsock2.h

#include <mysql.h>

#pragma comment(lib, “libmysql.lib”)

2、创建MYSQL变量。如:

MYSQL mysql

3、初始化MYSQL变量。

mysql_init(&mysql)

4、调用mysql_real_connect函数连接Mysql数据库。mysql_real_connect函数的原型如下:

MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host,const char *user,const char *passwd,const char *db,unsigned int port,const char *unix_socket,unsigned long clientflag)

参数说明:mysql–前面定义的MYSQL变量;host–MYSQL服务器的地址;user–登录用户名;passwd–登录密码;db–要连接的数据库;port–MYSQL服务器的TCP服务端口;unix_socket–unix连接方式,为NULL时表示不使用socket或管道机制;clientflag–Mysql运行为ODBC数据库的标记,一般取0。连接失败时该函数返回0。

5、调用mysql_real_query函数进行数据库查询。mysql_real_query函数的原型如下:

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length)

参数说明:mysql–前面定义的MYSQL变量;q–SQL查询语句;length–查询语句的长度。

查询成功则该函数返回0。

6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

两个函数的原型分别为:

MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql)

MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql)

这两个函数分别代表了获取查询结果的两种方式。第一种,调用mysql_store_result函数将从Mysql服务器查询的所有数据都存储到客户端,然后读取;第二种,调用mysql_use_result初始化检索,以便于后面一行一行的读取结果集,而它本身并没有从服务器读取任何数据,这种方式较之第一种速度更快且所需内存更少,但它会绑定服务器,阻止其他线程更新任何表,而且必须重复执行mysql_fetch_row读取数据,直至返回NULL,否则未读取的行会在下一次查询时作为结果的一部分返回,故经常我们使用mysql_store_result。

7、调用mysql_fetch_row函数读取结果集数据。

上述两种方式最后都是重复调用mysql_fetch_row函数读取数据。mysql_fetch_row函数的原型如下:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result)

参数result就是mysql_store_result或mysql_use_result的返回值。

该函数返回MYSQL_ROW型的变量,即字符串数组,假设为row,则row〔i〕为第i个字段的值。当到结果集尾部时,此函数返回NULL。

8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露。mysql_free_result函数的原型如下:

void STDCALL mysql_free_result(MYSQL_RES *result)

9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接。mysql_close函数的原型为:

void STDCALL mysql_close(MYSQL *sock)

1.数据库连接:在config文件中的形式

<connectionStrings>

<add name="dbConnection" connectionString="Data Source=192.168.1.100Initial Catalog=NanFangMgrUser ID=saPassWord=sa" providerName="System.Data.SqlClient"/>

</connectionStrings>

2.在C#中调用:

System.Configuration.ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString

3.将上述连接串保存到文本文件中

private string FILE_NAME = Application.StartupPath + "\\mytxtFile.txt"

private void WriteFile(string str)

{

StreamWriter sr

if (File.Exists(FILE_NAME)) //如果文件存在,则创建File.AppendText对象

{

sr = File.AppendText(FILE_NAME)

}

else//如果文件不存在,则创建File.CreateText对象

{

sr = File.CreateText(FILE_NAME)

}

sr.WriteLine(str)

sr.Close()

}

4.从文本文件中去内容

private String ReadTxtFile()

{

if (File.Exists(FILE_NAME)) //如果文件存在

{

String[] strs = System.IO.File.ReadAllLines(FILE_NAME)

return strs[strs.Length - 1]

}

return String.Empty

}

5.数据库连接,并 *** 作

5.1 查询

String ConnectionString=System.Configuration.ConfigurationManager.ConnectionStrings["dbConnection"].ConnectionString

public DataTable Query(String where)

{

String sql = String.Format("select * from mytable Where {0}", where.ToLower().Replace("update", "").Replace("delete", "").Replace("insert", "").Replace("", "").Replace("--", "").Replace("exec", ""))

try

{

SqlDataAdapter da = new SqlDataAdapter(sql, new SqlConnection(ConnectionString))

DataTable dt = new DataTable()

da.Fill(dt)

return dt

}

catch

{

return null

}

}

5.2 新增

public int New(Entities.mytable obj)

{

String sql = "insert into mytable(pkid,a,b,c) values(@pkid,@a,@b,@c)"

SqlConnection cn = new SqlConnection(ConnectionString)

SqlCommand cmd = new SqlCommand(sql, cn)

cmd.Parameters.AddWithValue("@a", obj.a)

cmd.Parameters.AddWithValue("@b", obj.b)

cmd.Parameters.AddWithValue("@c", obj.c)

cmd.Parameters.AddWithValue("@pkid",

String.Empty.Equals(obj.pkid) ? System.Guid.NewGuid().ToString() : obj.pkid)

try

{

if (cn.State != ConnectionState.Open)

cn.Open()

return cmd.ExecuteNonQuery()

}

catch

{

return -1

}

finally

{

if (cn.State != ConnectionState.Closed)

cn.Close()

}

}

5.3 编辑

public int Update(Entities.mytable obj)

{

String sql = "Update mytable Set a=@a,b=@b,c=@c Where pkid=@ObjectID"

SqlConnection cn = new SqlConnection(ConnectionString)

SqlCommand cmd = new SqlCommand(sql, cn)

cmd.Parameters.AddWithValue("@a", obj.a)

cmd.Parameters.AddWithValue("@b", obj.b)

cmd.Parameters.AddWithValue("@c", obj.c)

cmd.Parameters.AddWithValue("@pkid", obj.pkid)

try

{

if (cn.State != ConnectionState.Open)

cn.Open()

return cmd.ExecuteNonQuery()

}

catch

{

return -1

}

finally

{

if (cn.State != ConnectionState.Closed)

cn.Close()

}

}

5.4 删除

public int Del(String where)

{

String sql = String.Format("delete from mytable Where {0}", where.ToLower().Replace("update", "").Replace("delete", ""))

SqlConnection cn = new SqlConnection(ConnectionString)

SqlCommand cmd = new SqlCommand(sql, cn)

try

{

if (cn.State != ConnectionState.Open)

cn.Open()

return cmd.ExecuteNonQuery()

}

catch

{

return -1

}

finally

{

if (cn.State != ConnectionState.Closed)

cn.Close()

}

}

C++连接SQL数据库第一步 系统配置

1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码。

2.需要在ODBC中进行数据源配置,数据源选\”SQL SERVER”,登录方式使用“使用输入用户登录ID和密码的SQL SERVER验证”,并填写登录名(sa)和密码,注意一点,密码不能为空,这就意味着你的sa用户必须得有密码。否则无法通过系统本身的安全策略。测试通过就完成了配置。

C++连接SQL数据库第二步 C++与SQL连接初始化

1.在你所建立的C++项目中的stdafx.h头文件中引入ADO

具体代码如下

#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得到的一个具体的实例类。_ConnectionPtr类封装了Connection对象的Idispatch接口指针及其一些必要的 *** 作。可以通过这个指针 *** 纵Connection对象。

例如连接SQLServer数据库,代码如下:

//连接到MS SQL Server

//初始化指针

_ConnectionPtr pMyConnect = NULL

HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection))

if (FAILED(hr))

return

//初始化链接参数

_bstr_t strConnect = “Provider=SQLOLEDB

Server=hch

Database=mytest

uid=sapwd=sa”//Database指你系统中的数据库

//执行连接

try

{

// Open方法连接字串必须四BSTR或者_bstr_t类型

pMyConnect->Open(strConnect, “”, “”, NULL)

}

catch(_com_error &e)

{

MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION)

}//发生链接错误

C++连接SQL数据库第三步 简单的数据连接

//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集

//初始化过程 以下是个实例

_RecordsetPtr pRecordset

if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))

{

return

}

//执行 *** 作

try

{

pRecordset->Open(_variant_t(”userinfo”),

_variant_t((IDispatch*)pMyConnect),

adOpenKeyset, adLockOptimistic, adCmdTable)

}

catch (_com_error &e)

{

MessageBox(”无法打开userinfo表\”, “系统提示”,

MB_OK|MB_ICONINFORMATION)

}

C++连接SQL数据库第四步 执行SQL语句

这里是关键,我认为只要你懂点SQL语句那么一切都会方便许多比用上面的方法简单,更有效率点。

首先

m_pConnection.CreateInstance(_uuidof(Connection))

//初始化Connection指针

m_pRecordset.CreateInstance(__uuidof(Recordset))

//初始化Recordset指针

CString strSql=”select * from tb_goods”//具体执行的SQL语句

m_pRecordset=m_pConnection->Execute(_bstr_t(strSql),

NULL, adCmdText)//将查询数据导入m_pRecordset数据容器

至此 你的SQL语句已经执行完成了m_pRecordset内的数据就是你执行的结果。

取得记录:

while(!m_pRecordset->adoEOF)//遍历并读取name列的记录并输出

{

CString temp = (TCHAR *)(_bstr_t)m_pRecordset->GetFields()->GetItem

(”name”)->Value

AfxMessageBox(temp)

pRecordset->MoveNext()

}

插入记录

//记得初始化指针再执行以下 *** 作

CString strsql

strsql.Format(”insert into tb_goods(no,name, price)

values(’%d’,'%s’, %d)”,m_intNo,m_strName,m_intPrice)

m_pRecordset=m_pConnection->

Execute(_bstr_t(strsql),NULL,adCmdText)

修改记录

CString strsql

strsql.Format(”update tb_goods set name=’%s’ ,

price=%d where no=%d “,m_strName,m_intPrice,m_intNo)

m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText)

删除记录

CString strsql

strsql.Format(”delete from tb_goodswhere no= ‘%d’ “,m_intNo)

m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10657014.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-10
下一篇2023-05-10

发表评论

登录后才能评论

评论列表(0条)

    保存