对于C语言的数据库脚本使用system()是一种好方法吗?

我正在寻找从C程序连接到数据库。 但我认为ODBC连接,登录和所有需要一些库。 另外,我有一个像Tiny C Compiler这样的最小编译器,速度非常快。 我不想使用连接和查询数据库所需的任何ODBC逻辑等。

所以我使用的方法如下。

我使用了一个bteq脚本(teradata),它将具有登录,查询和注销命令。 (FYI bteq是一个命令行数据库实用程序。你可以通过转到exe的路径在命令提示符中使用它类似于mysql.exe。你可以用mysql.exe等替换bteq)。 我用

system("bteq out.txt"); 

myscript.txt将如下所示..

 .logon boxname/user,password; select date; .logoff; 

上面的脚本将登录到数据库和查询日期(您可以根据数据库引擎和需要更改查询和编写脚本)并将输出输出到out.txt。

现在我将使用fgetc,fscanf或fgets解析我想要的行X列的out.txt。 并使用数据检查并在任何服务器上使用PHP发送邮件

system("c:/server/php/php.exe sendmail.php");

我们可以通过简单的C程序为许多数据库引擎(如mysql,…等)执行相同的操作。

现在我的问题是上述方法是否有任何缺陷。 如果是,那么我该如何克服它。 我问这个问题是因为我认为这种方法是非常规的。 请对此方法发表意见。 我不打算执行所需的时间,使用的RAM,性能问题等。我知道system()函数是耗时的,这不是我关心的问题。 我还开发了访问查询结果的特定函数(类似于访问平面文件)。 如果您对此方法有任何改进,请告诉我。 如果您知道这方面的任何缺陷,请告诉我。 欢迎各种建议。

我的环境是:使用Tiny C编译器的Windows上的teradata bteq

方法很好:通过以适当的语言实现它们来解耦db子系统和解析器子系统是很好的。

只有这个小小的东西 – 但我可能会弄错,因为我不熟悉bteq:程序需要在执行文件夹中安装bteq脚本; 此脚本将包含用户名和密码。 如果不以某种方式编写这些内容,则可能存在安全漏洞。

只要您的需求很简单,这是访问外部数据库的完美方式。 如果你已经知道这样做的性能和内存含义,那么就没有更多的话要说了。

如果您的调用代码运行setuid或setgid,我不建议这样做,但在这种情况下,您可以使用其中一个exec()函数。 (您可能还需要考虑其他一些注意事项,详见man 3 system 。)