示例#1
0
文件: step3.cpp 项目: kzinti/revok
int main(int argc, char* argv[])
{
    SAConnection con; // connection object
    SACommand cmd;    // command object
    
    try
    {
        // connect to database (Oracle in our example)
        con.Connect("test", "tester", "tester", SA_Oracle_Client);
        // associate a command with connection
        cmd.setConnection(&con);

        // Insert 2 rows
        cmd.setCommandText(
            "Insert into test_tbl(fid, fvarchar20) values(:1, :2)");

        // use first method of binding - param assignment
        cmd.Param(1).setAsLong() = 2;
        cmd.Param(2).setAsString() = "Some string (2)";
        // Insert first row
        cmd.Execute();

        // use second method of binding - stream binding
        cmd << (long)3 << "Some string (3)";
        // Insert second row
        cmd.Execute();

        // commit changes on success
        con.Commit();

        printf("Input parameters bound, rows inserted!\n");
    }
    catch(SAException &x)
    {
        // SAConnection::Rollback()
        // can also throw an exception
        // (if a network error for example),
        // we will be ready
        try
        {
            // on error rollback changes
            con.Rollback();
        }
        catch(SAException &)
        {
        }
        // print error message
        printf("%s\n", (const char*)x.ErrText());
    }
    
    return 0;
}
示例#2
0
void InterBaseEvents()
{
	SAConnection con;
	SACommand cmd;
	event_data_t event_data;

	try
	{
		con.Connect(
			"transfer:d:/temp/siemens/controller.gdb",     // database name
			"sysdba",   // user name
			"masterkey",   // password
			SA_InterBase_Client);
		event_data.pibAPI = (ibAPI *)con.NativeAPI();
		event_data.pibConnectionHandles = (ibConnectionHandles *)con.NativeHandles();

		con.setAutoCommit(SA_AutoCommitOn);

		// register interest for "TestEvent" event
		event_data.length = event_data.pibAPI->isc_event_block(
			&event_data.event_buffer,
			&event_data.result_buffer,
			1,
			"TestEvent");

		event_data.que_events();
		
		// this should fire event
		cmd.setConnection(&con);
		cmd.setCommandText("a");
		cmd.Param("sEvent").setAsString() = "TestEvent";
		cmd.Execute();

		// wait for event to be fired
		getchar();
	}
	catch(SAException &x)
	{
		// SAConnection::Rollback()
		// can also throw an exception
		// (if a network error for example),
		// we will be ready
		try
		{
			// on error rollback changes
			con.Rollback();
		}
		catch(SAException &)
		{
		}
		// print error message
		printf("Err = %s\nCode = %d\n", (const char*)x.ErrText(),
			x.ErrNativeCode());
	}
}
示例#3
0
int OnExecProc(QUEUE_LIST *pDataNode)
{
    //报文(MSG)
    unsigned char *p = pDataNode->Buffer;
    p++;

    char ProcName[255];
    memset(ProcName, 0, sizeof(ProcName));

    int iProcNameLen, iInputParaNums, iOutputParaNums;
    P2W(iProcNameLen, p);
    p += 2;
    memcpy(ProcName, p, iProcNameLen);
    p += iProcNameLen;

    // 输入参数个数
    P2W(iInputParaNums, p);
    p += 2;

	SACommand Cmd;
    Cmd.setConnection(pDataNode->psaConn);
    Cmd.setCommandText(ProcName);

    char ParaName[255], ParaVaule[255];
    int iLen;
    for (int i = 0; i < iInputParaNums; i++)
    {
        BYTE ParaType = *p;
        p++;
        memset(ParaName, 0, sizeof(ParaName));
        memset(ParaVaule, 0, sizeof(ParaVaule));
        P2W(iLen, p);
        p += 2;
        memcpy(ParaName, p, iLen);
        p += iLen;

        P2W(iLen, p);
        p += 2;
        memcpy(ParaVaule, p, iLen);
        p += iLen;

        if (ParaType == 0x00)
            Cmd.Param(ParaName).setAsLong() = atoi(ParaVaule);
        else if (ParaType == 0x01)
            Cmd.Param(ParaName).setAsString() = ParaVaule;
    }
    Cmd.Execute();

    // 输出缓存
    BYTE OutBuf[1024];
    memset(OutBuf, 0, sizeof(OutBuf));
    int iOffset = 0;

    // 输出参数个数
    memcpy(&OutBuf[iOffset], p, 2);
    P2W(iOutputParaNums, p);
    p += 2;
    iOffset += 2;

    for (int i = 0; i < iOutputParaNums; i++)
    {
        memset(ParaName, 0, sizeof(ParaName));
        memset(ParaVaule, 0, sizeof(ParaVaule));

        // 参数类型
        BYTE ParaType = *p;
        memcpy(&OutBuf[iOffset], p, 1);
        p++;
        iOffset ++;

        // 参数名称
        P2W(iLen, p);
        memcpy(&OutBuf[iOffset], p, 2);
        p += 2;
        iOffset += 2;

        memcpy(ParaName, p, iLen);
        memcpy(&OutBuf[iOffset], p, iLen);
        p += iLen;
        iOffset += iLen;

        // 参数值
        if (ParaType == 0x00)
            sprintf(ParaVaule, "%ld", Cmd.Param(ParaName).asLong());
        else if (ParaType == 0x01)
            strcpy(ParaVaule, Cmd.Param(ParaName).asString());

        int iTempLen = strlen(ParaVaule);
        BYTE *pLen = &OutBuf[iOffset];
        W2P(pLen, iTempLen);
        iOffset += 2;
        memcpy(&OutBuf[iOffset], ParaVaule, iTempLen);
        iOffset += iTempLen;
    }

    p = &pDataNode->Buffer[1];
    int iOutLen = 1;
    *p++ = CMD_OK;                                  //执行SQL成功
    iOutLen++;

    memcpy(p, OutBuf, iOffset);
    iOutLen += iOffset;

    iOutLen += 2;
    pDataNode->Length = iOutLen;

    return 1;
}
void Oracle_OCI_ATTR_CHARSET_FORM_OCI_ATTR_CHARSET_ID()
{
	SAConnection con;
	SACommand cmd;
	cmd.setConnection(&con);

    try
    {
		con.Connect("cit", "dwadm", "dwadm", SA_Oracle_Client);

		bool bDropTable = !false;
		bool bCreateTable = !false;
		if(bDropTable)
		{
			cmd.setCommandText(
				"drop table test_charset");
			cmd.Execute();
		}
		if(bCreateTable)
		{
			cmd.setCommandText(
				"Create table test_charset (f1 nchar(254), f2 char(254))");
			cmd.Execute();
		}

		cmd.setCommandText("delete from test_charset");
		cmd.Execute();

		cmd.setCommandText("insert into test_charset values (:1, :2)");
		cmd.Param(1).setOption("OCI_ATTR_CHARSET_FORM") = "SQLCS_NCHAR";
		cmd.Param(1).setOption("OCI_ATTR_CHARSET_ID") = "171";
		cmd.Param(2).setOption("OCI_ATTR_CHARSET_ID") = "CL8MSWIN1251";

		cmd.Param(1).setAsString() = "string f1 - 1";
		cmd.Param(2).setAsValueRead() = cmd.Param(1);
		cmd.Execute();

		cmd.Param(1).setAsString() = "������ f1 - 2";
		cmd.Param(2).setAsValueRead() = cmd.Param(1);
		cmd.Execute();

		cmd.setCommandText("select * from test_charset");
		cmd.Execute();

		cmd.Field(1).setOption("OCI_ATTR_CHARSET_ID") = "171";
		cmd.Field(2).setOption("OCI_ATTR_CHARSET_ID") = "CL8MSWIN1251";
		while(cmd.FetchNext())
		{
			cout 
				<< (const char*)cmd[1].asString()
				<< ""
				<< (const char*)cmd[2].asString()
				<< endl;
		}
    }
    catch(SAException &x)
    {
        try
        {
            con.Rollback();
        }
        catch(SAException &)
        {
        }
        printf("%s\n", (const char*)x.ErrText());
    }
}