0

我实际上想在 C 程序中执行 SQL 查询,查询中的变量SELECT是存储在字符串变量中的值。

例如:

void fetch_data(char var[])
{
    char COL1[]=var, COL2[]="Address", COL3[]="Name";
    SELECT COL1, COL2, COL3 FROM TABLE WHERE COL4='some value';
}

如您所见,我希望我的代码灵活,以便我可以根据作为函数var参数的变量具有不同的列名fetch_data

请告诉我这在 C 中是否可行。

如果上述方法不可行,我想到了另一种方法:我们是否可以将整个 SQL 语句存储在一个字符串中并执行它,以便我可以根据我在函数中得到的参数值随时修改这个字符串fetch_data()

下面的代码将使我的观点更清楚我想要什么:

void fetch_data(char var[])
{
    char COL1[]="Name", COL2[]="Address", COL3[]=var;
    char qry1[]="SELECT ", qry2[]=var, qry3=" COL2, COL3 FROM TABLE WHERE COL4='some value';";
    char str[]=strcat(qry1,qry2);
    char query[]=strcat(str,qry3);
    //now query will be having "select (value of var), COL2, COL3 FROM TABLE WHERE COL4='some value';
}

现在在上面的代码中,我可以执行存储在字符串中的查询query吗?

请让我知道这两种方法中的任何一种是否可以工作,或者是否可以通过“C”中的任何其他方法来实现。

4

1 回答 1

2

第二种方法肯定会起作用,你只需要小心你的字符串操作。

实际上,您可以使用以下方法简化它snprintf

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='some value';", var);

如果查询需要更加动态,即'some value'还需要来自变量,则可以添加额外的格式说明符:

snprintf(queryStr, MAX_QUERY_LENGTH,
         "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='%s';", var, someValue);

一旦你准备好这样的查询,你如何使用它取决于你的工具链。你在使用ODBC吗?如果是这样,那么您可以使用 ODBC 调用来处理您的查询,并使用 ODBC 驱动程序来管理与您的数据库的连接。否则,您使用的是哪个数据库,以及提供给您的 API 是什么?例如,MySQL 提供了一个相当大的C API,oracle 提供了一个不同的 API,而 SQL Server 提供了另一个。

至于第一个选项,您需要使用SQL 预处理器在 C 代码中使用原始 SQL 语句之类的东西,语法将取决于您使用的工具。

我还应该补充一点,您不能使用以下语句复制非文字 C 字符串:char COL1[]=var;。相反,您需要使用字符串库方法,例如strncpy.

于 2012-09-07T14:43:34.677 回答