GVKun编程网logo

在c ++项目中使用mysql_query进行多个查询(c++操作mysql数据库)

22

最近很多小伙伴都在问在c++项目中使用mysql_query进行多个查询和c++操作mysql数据库这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c#–如何使用MysqlData

最近很多小伙伴都在问在c ++项目中使用mysql_query进行多个查询c++操作mysql数据库这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展c# – 如何使用MysqlDataReader运行多个查询、mysql_db_query 与mysql_query 查询区别、mysql_query — 发送一条 MySQL 查询、mysql_unbuffered_query与mysql_query的区别等相关知识,下面开始了哦!

本文目录一览:

在c ++项目中使用mysql_query进行多个查询(c++操作mysql数据库)

在c ++项目中使用mysql_query进行多个查询(c++操作mysql数据库)

因此,这不适用于mysql_query。

我严格使用c ++,并且我没有使用php。

我希望执行此双重查询,以便在由并发用户创建ID的交易系统中,我将始终具有唯一ID。

mysql_query(connection, \"INSERT INTO User() VALUES ();  SELECT LAST_INSERT_ID(); ");

它可以完美地在MySql数据库中运行,但是我需要将其添加到Eclipse(我正在使用Ubuntu 12.04 LTS)。

我的应用程序很大,如果可能的话,我不想更改为mysqli,但是如果没有其他方法,那就可以了。

你能帮我吗?提前致谢。

答案1

小编典典

根据MySQL C API文档:

MySQL
5.6还支持执行包含以分号(``;’‘)字符分隔的多个语句的字符串。通过使用mysql_real_connect()连接到服务器时或通过调用mysql_set_server_option()连接后指定的特殊选项,可以启用此功能。

和:

CLIENT_MULTI_STATEMENTS使mysql_query()和mysql_real_query()能够执行包含由分号分隔的多个语句的语句字符串。此选项还隐式启用CLIENT_MULTI_RESULTS,因此,将CLIENT_MULTI_STATEMENTS的flags参数设置为mysql_real_connect()等效于CLIENT_MULTI_STATEMENTS
| CLIENT_MULTI_RESULTS。也就是说,CLIENT_MULTI_STATEMENTS足以启用多语句执行和所有多结果处理。

因此,假设您使用mysql_real_connect设置了一些不同的mysql连接,则可以在单个mysql_query()调用中提供多个语句,并用分号分隔。您需要将以下标志作为最后一个参数传递:CLIENT_MULTI_STATEMENTS,其文档说:

告诉服务器客户端可以在单个字符串中发送多个语句(以``;’‘分隔)。如果未设置此标志,则禁用多语句执行。有关此标志的更多信息,请参见此表后面的注释。

请参阅C API对多语句执行的支持和22.8.7.53。mysql_real_connect()了解更多详细信息。

c# – 如何使用MysqlDataReader运行多个查询

c# – 如何使用MysqlDataReader运行多个查询

我正在尝试在我的代码中进行多个查询,如下所示,但它会在 MySqlDataReader行抛出异常rdr_get_latest_build_notes = get_latest_build_notes_cmd.ExecuteReader();因为我已经开了一个rdr

我用Google搜索并发现@ according to MSDN不受支持,我需要有关如何修复它的指导?

public IEnumerable<BuildNotes_op> RetrieveBuildDetails(string BuildID)
    {
        ....
        var conn = new MysqL.Data.MysqLClient.MysqLConnection();
        conn.ConnectionString = AciDev.aciDevConnectionString;
        try
        {
            Console.WriteLine("Connecting to MysqL...");
            conn.open();
            string sql = @"query1";
            MysqLCommand cmd = new MysqLCommand(sql,conn);
            MysqLDataReader rdr = cmd.ExecuteReader(); --> **rdr open here**
            ....

            while (rdr.Read())
            {
                .....
                if (rdr[4] != dbnull.Value)
                    ....................
                else
                     ........
                     string sql_get_latest_build_notes_cmd = "query2";

                     MysqLCommand get_latest_build_notes_cmd = new MysqLCommand(sql_get_latest_build_notes_cmd,conn);
                     MysqLDataReader rdr_get_latest_build_notes = get_latest_build_notes_cmd.ExecuteReader();  --> **throws exception here**
                     if (rdr_get_latest_build_notes.HasRows)
                    {
                      ....................

                    }
                     rdr_get_latest_build_notes.Close();

                if (BuildDetails != null)
                {
                    BuildNotesDetails.Add(BuildDetails);
                }
            }
            rdr.Close();
            conn.Close();
            return BuildNotesDetails;
        }

        catch
        {
            throw;
        }
        finally
        {
            conn.Close();
        }

例外:

There is already an open DataReader associated with this Connection which must be closed first.

解决方法

试试这个:

public IEnumerable<BuildNotes_op> RetrieveBuildDetails(string BuildID)
    {

        var conn = new MysqL.Data.MysqLClient.MysqLConnection();
         var conn2 = new MysqL.Data.MysqLClient.MysqLConnection();
        conn.ConnectionString = AciDev.aciDevConnectionString;
        try
        {
            Console.WriteLine("Connecting to MysqL...");
            conn.open();
            string sql = @"query1";
            MysqLCommand cmd = new MysqLCommand(sql,conn);
            MysqLDataReader rdr = cmd.ExecuteReader(); --> **rdr open here**
            ....

            while (rdr.Read())
            {
                .....
                if (rdr[4] != dbnull.Value)
                    ....................
                else
                     ........
                     string sql_get_latest_build_notes_cmd = "query2";

                     conn2.ConnectionString = AciDev.aciDevConnectionString;

                 Console.WriteLine("Connecting to MysqL...");
                  conn2.open();
                     MysqLCommand get_latest_build_notes_cmd = new MysqLCommand(sql_get_latest_build_notes_cmd,conn2);
                     MysqLDataReader rdr_get_latest_build_notes = get_latest_build_notes_cmd.ExecuteReader();  --> **throws exception here**
                     if (rdr_get_latest_build_notes.HasRows)
                    {
                      ....................

                    }
                     rdr_get_latest_build_notes.Close();
                    conn2.Close();

                if (BuildDetails != null)
                {
                    BuildNotesDetails.Add(BuildDetails);
                }
            }
            rdr_get_latest_build_notes.Close();
            rdr.Close();
            conn.Close();
            conn2.Close();
            return BuildNotesDetails;
        }

        catch
        {
            throw;
        }
        finally
        {
            rdr_get_latest_build_notes.Close();
            rdr.Close();
            conn.Close();
            conn2.Close();
        }

创建第二个连接var

mysql_db_query 与mysql_query 查询区别

mysql_db_query 与mysql_query 查询区别

区别就不说了,看了上面的实例就知道了,主要是多了一个mysql_select_db的区别,关于性能方面自PHP 4.0.6 起不提倡使用此函数。不要用此函数,用mysql_select_db() 和mysql_query() 来替代

mysql_query — 发送一条 MySQL 查询

mysql_query — 发送一条 MySQL 查询

仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回

一个资源标识符,如果查询执行不正确则返回 FALSE。对于

其它类型的 SQL 语句,在执行成功时返回 TRUE,出错时返回 FALSE

FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并

不说明任何有关影响到的或返回的行数。 很有可能一条查询执行成

功了但并未影响到或并未返回任何行.

create database "数据库名称"; 创建数据库

show databases; 显示数据库

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

show tables; 显示表

describe tablename; 显示具体的表结构

select 中加上distinct去除重复字段

 

mysql_num_rows — 取得结果集中行的数目

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");
mysql_select_db("database", $link);
$result = mysql_query("SELECT * FROM table1", $link);
$num_rows = mysql_num_rows($result);
echo "$num_rows Rows\n";
?>
mysql_num_rows() 返回结果集中行的数目。此命令仅对 SELECT 语句有效。
要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,
mysql_affected_rows()

 

mysql_unbuffered_query与mysql_query的区别

mysql_unbuffered_query与mysql_query的区别

PHP mysql_data_seek() 函数 定义和用法 mysql_data_seek() 函数移动内部结果的指针。 语法 mysql_data_seek(data,row) 参数 描述 data 必需。返回类型为 resource 的结果集。该结果集从 mysql_query() 的调用中得到。 row 必需。想要设定的新的结果集指针的

  php mysql_data_seek() 函数

  定义和用法

  mysql_data_seek() 函数移动内部结果的指针。

  语法

  mysql_data_seek(data,row)

  参数

  描述

  data

  必需。返回类型为 resource 的结果集。该结果集从 mysql_query() 的调用中得到。

  row

  必需。想要设定的新的结果集指针的行数。0 指示第一个记录。

  说明

  mysql_data_seek() 将 data 参数指定的 MySQL 结果内部的行指针移动到指定的行号。

  接着调用 mysql_fetch_row() 将返回那一行。

  row 从 0 开始。row 的取值范围应该从 0 到 mysql_num_rows – 1。

  但是如果结果集为空(mysql_num_rows() == 0),要将指针移动到 0 会失败并发出 E_WARNING 级的错误,mysql_data_seek() 将返回 false。

  返回值

  如果成功则返回 true,失败则返回 false。

  提示和注释

  注释:mysql_data_seek() 只能和 mysql_query()一起使用,,而不能用于 mysql_unbuffered_query()。

  例子

  $conn = mysql_connect(‘localhost’,''root’,''root’);

  mysql_query(‘set names gbk’);

  mysql_select_db(‘pw8′,$conn);

  $sql = "SELECT * FROM shop_district";

  //$result = mysql_unbuffered_query($sql,$conn);

  $result = mysql_query($sql,$conn);

  while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

  printf ("ID: %s FID: %s Name: %s

  ", $row[0], $row[1], $row[2]);

  }

  mysql_data_seek($result,0);

  while ($row = mysql_fetch_array($result, MYSQL_NUM)) {

  printf ("ID: %s FID: %s Name: %s

  ", $row[0], $row[1], $row[2]);

  }

 

  mysql_free_result($result);

今天关于在c ++项目中使用mysql_query进行多个查询c++操作mysql数据库的介绍到此结束,谢谢您的阅读,有关c# – 如何使用MysqlDataReader运行多个查询、mysql_db_query 与mysql_query 查询区别、mysql_query — 发送一条 MySQL 查询、mysql_unbuffered_query与mysql_query的区别等更多相关知识的信息可以在本站进行查询。

本文标签: