- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我刚开始为 ODBC 编写 C 代码但在这里我有问题......在搜索了 C 的 odbc 函数教程教程之后,我仍然无法准确理解他们如何协同工作...
语句 handle hstmt 对数据库数据到底做了什么?我知道它控制着我作为参数给出的 SQL 查询语句。但,,那么我作为查询给出的每个 SQL 语句都应该有每个语句句柄(hstmt)吗?还是多个 SQL 查询语句的一个语句句柄?
例如,
lstrcpy((LPTSTR)update, L"insert into employee values ('Dshong','summer','LosAngeles');");
SQLExecDirect(hstmt1, update, SQL_NTS);
lstrcpy((LPTSTR)update, L"insert into works values ('Dshong','Small Bank', 2500);");
SQLExecDirect(hstmt3, update1, SQL_NTS);
lstrcpy((LPTSTR)select, L"select * from works;");
if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS)
return printf("can’t exec direct");
lstrcpy((LPTSTR)select1, L"select * from employee;");
if (SQLExecDirect(hstmt2, select1, SQL_NTS) != SQL_SUCCESS)
return printf("can’t exec direct");
我应该像这样给两个插入语句和两个带有四个 hstmt 的选择语句吗?
如果我这样给,
lstrcpy((LPTSTR)insert, L"insert into employee values ('Dshong','summer','LosAngeles');");
SQLExecDirect(hstmt1, insert, SQL_NTS);
SQLExecDirect 将 hstmt1 作为参数,但我不知道 SQLExecDirect 如何使用它..
按照我的想法,结果应该是插入一行,不是吗?
但是当我运行代码时,它会为 ('Dshong','summer','LosAngeles')
插入多个相同的行...当我打印出结果时, ('Dshong','summer','LosAngeles')
被多次插入即使插入行不在 for 循环中...
以及它们如何与以下功能协同工作?
SQLBindCol(hstmt, 1, SQL_C_CHAR, id, (SDWORD)sizeof(id), &idlen);
SQLFetch(hstmt)
我知道他们只是在做什么,但是..在这里我想知道到底是用什么方式hstmt(语句句柄)与它们一起工作..
谢谢你..:)
最佳答案
C 中的句柄只是指向由 ODBC 分配的一 block 内存的指针。通常是跟踪 SQL 查询状态的结构。句柄在 INSERT 语句中用处不大,只用了一次。除非失败,否则您需要将完全 相同的句柄传递给 SQLError() 以找出问题所在。然后使用哪个 ODBC 访问该内部结构并检索错误代码。句柄相对于结构指针的优势在于它隐藏了内部实现。
您当然需要在 SELECT 查询中重复使用它,因为您要检索查询结果。您必须将 完全 相同的句柄传递给 SQLBindCol() 以将查询结果中的列映射到内存位置。并使用 SQLFetch() 检索一行。
如果您了解 C++,那么将句柄视为 this 对象指针会很有帮助。和 SQLAllocStmt() 作为构造函数。并将 SQLFetch() 作为类的实例方法。最后 SQLFreeHandle() 作为析构函数。这正是 C++ ODBC 包装器类所做的,例如 MFC 的 CRecordSet、CDatabase 来包装 SQLHDBC 句柄。
在大多数情况下,您只使用一个 SQLHSTMT 句柄。除非你同时运行多个 SQL 语句。假设要从 SELECT 查询生成 UPDATE 语句,这需要两个句柄。
关于sql - 语句 handle(hstmt) 究竟做了什么?在ODBC中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13208087/
这个问题已经有答案了: what is the difference between OLE DB and ODBC data sources? (11 个回答) 已关闭10 年前。 OLEDB 和
我正在制作安装脚本并且我正在使用 ODBC,我如何自动将节点添加到 ODBC 数据源。 使用 Visual Studio 安装项目构建安装程序,但我能够为其运行任何脚本。 谢谢。 最佳答案 1) OD
所以我正在将一个旧的 filemaker 数据库传输到 MySQL,一些重复的字段给我带来了一些问题。我读过 ODBC 标准支持这些字段,只有当它们的类型是“文本”并且每个重复都与某个定界符( see
一个月前,我向一个哥们展示了如何使用 .NET 来查询 MySQL。它工作得很好,但他不明白为什么我们需要一个 MySQL 与 ODBC 结合的“驱动程序”。他认为 ODBC 就足够了。 当他问我为什
为什么 ODBC 很慢?底层架构是什么?有人可以对此多加关注> 最佳答案 一般来说(我的意思是 GENERAL)ODBC 驱动程序在混合中添加了另一层。它必须接受您的查询并将其转换为本地查询语言(本地
问题:我正在使用 AsteriskNow,它在 VirtualBox 中运行 asterisk 2.0 服务器。我想使用 ODBC 模块将 Asterisk 与 MySQL 数据库连接起来。但它失败了
我有一个名为“myodbc”的用户定义的 ODBC 连接,其中保存了用户名和密码。这是管理员为我创建的,因此我无法访问凭据。 如何在不传递凭据的情况下与 SAS 建立连接。我认为以下工作会,但我收到无
我最近发现 libname 语句对于访问驻留在 odbc 中的表非常方便。但我不知道如何访问那些具有两级名称的表。下面是一个例子。 我使用的旧代码(此代码有效): proc sql; conn
我们通常使用 MS Visual Foxpro v9.0 SP1、语言、表格和报告。但是,有时我们使用 ODBC 驱动程序连接到表。 ODBC 驱动程序是为 Foxpro v6 编写的,不支持某些嵌套
我第一次尝试在使用 PostgreSQL 9 的 Windows XP Pro 上打开一个程序。我收到一条错误消息: A problem was encountered while trying to
我有一个 spark 集群设置,并在我的数据集上尝试了 native scala 和 spark sql,该设置似乎在大多数情况下都有效。我有以下问题 从 ODBC/外部连接到集群,我应该期待什么?
我正在尝试为 Hive 设置 ODBC 连接。我按照以下步骤操作,但没有成功。 用户 DSN-->添加--> Hortonworks Hive ODBC 驱动程序--> 我提供了以下详细信息 主机:主
我找不到任何文档或示例。到目前为止,我可以成功连接,但是我不知道选择和返回数据的语法。 :odbc.start() {:ok, conn} = :odbc.connect('DSN=mydsn;UID
我正在阅读一篇有关数据透视缓存的 MS Excel 帮助文章,并想知道 OLE DB 和 ODBC 源 的含义 ...You should use the CommandText property i
从应用程序调用 SQLColAttribute 时出现 SQL_INVALID_HANDLE 错误(尝试与自行开发的 odbc 驱动程序通信)我不知道为什么句柄被声明为无效句柄,因为它是一个简单的结构
我有一个简单的 SQL,需要通过 ODBC 调用 RedShift。SQL是这样的 SELECT id as Tag From SomeView 这根本不起作用。它给了我错误 DataSource.E
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
从应用程序调用 SQLColAttribute 时出现 SQL_INVALID_HANDLE 错误(尝试与自行开发的 odbc 驱动程序通信)我不知道为什么句柄被声明为无效句柄,因为它是一个简单的结构
我有一个简单的 SQL,需要通过 ODBC 调用 RedShift。SQL是这样的 SELECT id as Tag From SomeView 这根本不起作用。它给了我错误 DataSource.E
我正在尝试使用 BIML 生成自动暂存区域。源数据库为Progress,通过ODBC连接。 我正在使用以下演练: https://www.cathrinewilhelmsen.net/2015/07/
我是一名优秀的程序员,十分优秀!