zoukankan      html  css  js  c++  java
  • Linux下用freetds执行SqlServer的sql语句和存储过程

      Windows下访问Sqlserver很方便,特别是用ADO,即便是用C++写代码,也没怎么感觉麻烦,如果是用C#的话,写起来估计更是飞一般的感觉,可现在我要处理的问题是在Linux下访问SqlServer,执行sql语句和存储过程……

      好,不废话了,下面开工。

    一、包含头文件

    #include <sybfront.h> //freetds

    #include <sybdb.h> //freetds 

    二、执行sql语句或存储过程

    1、查询类 

    1.1 核心代码:

    bool queryCmd(DBPROCESS *dbprocess,const char* strSql)
    {
        dbcmd(dbprocess,strSql);
        if(dbsqlexec(dbprocess) == FAIL)
        {
            printf("Query error.\n");
            returnfalse;
        }
        DBINT result_code;
        char infArr[MaxColumnNums][MaxColumnSize];
        int retCode = 1;
        while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS)
        {
            if (result_code == SUCCEED)
            {
                int i=1;
                int sz = 0;
                while(true)
                {
                    //retCode = dbbind(dbprocess,i++, CHARBIND, (DBCHAR)0, (BYTE*)infArr[i]);
                    retCode = dbbind(dbprocess,i, CHARBIND, (DBINT)0, (BYTE*)infArr[i]);
                    if(retCode != 1) break;
                    i++;
                }
                sz = i;
                while (dbnextrow(dbprocess) != NO_MORE_ROWS)
                {
                    for(i=1; i<=sz; i++)
                    {
                        //printf("%s ",infArr[i]);
                        cout<<infArr[i]<<" ";//<<endl;
                        memset(infArr[i],0,sizeof(infArr[i]));
                    }
                    cout<<endl;
                }
            }
        }
        returntrue;
    } 

    1.2 直接执行Sql语句

    queryCmd(dbprocess, "select * from table"); 

    1.3 不带参数的存储过程 

    创建存储过程如下: 

    createproctestPro 

    as 

      select*fromstu; 

    go 

    调用如下:

    queryCmd(dbprocess, "exec testPro"); 

    1.4 带参数的存储过程 

    创建存储过程如下: 

    createprocgetPro1(@numint) 

    as

      select*fromstuwhereStuID=@num;

    go 

    调用如下:

    queryCmd(dbprocess, "exec getPro1 1003"); 

    2、更新类

    2.1 核心代码: 

    bool updateCmd(DBPROCESS *dbprocess,const char* strSql)
    {
        dbcmd(dbprocess,strSql);
        if(dbsqlexec(dbprocess) == FAIL)
        {
            printf("error : update fail\n");
            returnfalse;
        }
        returntrue;
    }

    2.2 直接执行sql语句

    updateCmd(dbprocess,"insert into stu(StuID, Name, Age) values(888,'Mike',24)");

    2.3不带参数的存储过程

    创建存储过程如下: 

    createprocdelPro1

    as

      deletefromstuwhereStuID=888

    go

    调用如下:

    updateCmd(dbprocess,"exec delPro1"); 

    2.4 带参数的存储过程

    创建存储过程如下: 

    createprocdelPro2(@numint)

    as

      deletefromstuwhereStuID=@num

    go 

    调用如下: 

    updateCmd(dbprocess,"exec delPro2 888"); 

    三、编译选项

    比如源文件为test2.cppfreetds的安装路径为usr/local/freetds ,则如下编译:

    g++ -g test2.cpp -o test2 -L/usr/local/freetds/lib -lsybdb -I/usr/local/freetds/include

    PS环境 freetds 0.91 + Sqlserver 2008

    好,就这些了,希望对你有帮助。

  • E-Mail : Mike_Zhang@live.com
  • 转载请注明出处,谢谢!
查看全文
  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/useFreetdsAccessSqlServer2008.html
  • Copyright © 2011-2022 走看看