示例#1
0
 virtual void* Main(void) {
     //for (int i = 0; i < 10; ++i) {
     for (;;) {
         try {
             CDatabase db("MSDEV");
             db.Connect();
             CQuery q = db.NewQuery("select serverproperty('servername')");
             q.Execute();
             LOG_POST("Thread " << m_Num << " connected to " << q.begin()[1].AsString());
             try {
                 q.SetSql("drop table #t");
                 q.Execute();
             }
             catch (CSDB_Exception&) {
                 //
             }
             q.SetSql("create table #t (tt varchar(100))");
             q.Execute();
             q.SetSql("insert into #t values (@tt)");
             for (int i = 0; i < 500; ++i) {
                 q.SetParameter("@tt", i, eSDB_String);
                 q.Execute();
             }
             SleepMilliSec(100);
         }
         catch (CSDB_Exception& ex) {
             LOG_POST("Error from SDBAPI in thread " << m_Num << ": " << ex);
         }
     }
     return NULL;
 }
BEGIN_NCBI_SCOPE

///////////////////////////////////////////////////////////////////////////////
BOOST_AUTO_TEST_CASE(Test_DateTime)
{
    string sql;
    CQuery query = GetDatabase().NewQuery();
    CTime t;
    CTime dt_value;

    try {
        if (true) {
            // Initialization ...
            {
                sql =
                    "CREATE TABLE #test_datetime ( \n"
                    "   id INT, \n"
                    "   dt_field DATETIME NULL \n"
                    ") \n";

                query.SetSql( sql );
                query.Execute();
                query.RequireRowCount(0);
                BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
            }

            {
                // Initialization ...
                {
                    sql = "INSERT INTO #test_datetime(id, dt_field) "
                          "VALUES(1, GETDATE() )";

                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(0);
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }

                // Retrieve data ...
                {
                    sql = "SELECT * FROM #test_datetime";

                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(1);
                    BOOST_CHECK( query.HasMoreResultSets() );
                    CQuery::iterator it = query.begin();
                    BOOST_CHECK( it != query.end() );
                    BOOST_CHECK( !it[2].IsNull());
                    dt_value = it[2].AsDateTime();
                    BOOST_CHECK( !dt_value.IsEmpty() );
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }

                // Insert data using parameters ...
                {
                    query.SetSql( "DELETE FROM #test_datetime" );
                    query.Execute();
                    query.RequireRowCount(0);
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));

                    query.SetParameter( "@dt_val", dt_value );

                    sql = "INSERT INTO #test_datetime(id, dt_field) "
                          "VALUES(1, @dt_val)";

                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(0);
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }

                // Retrieve data again ...
                {
                    sql = "SELECT * FROM #test_datetime";

                    // ClearParamList is necessary here ...
                    query.ClearParameters();
                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(1);
                    BOOST_CHECK( query.HasMoreResultSets() );
                    CQuery::iterator it = query.begin();
                    BOOST_CHECK( it != query.end() );
                    BOOST_CHECK( !it[2].IsNull());
                    CTime dt_value2 = it[2].AsDateTime();
                    BOOST_CHECK_EQUAL( dt_value.AsString(), dt_value2.AsString() );
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }

                // Insert NULL data using parameters ...
                {
                    query.SetSql( "DELETE FROM #test_datetime" );
                    query.Execute();
                    query.RequireRowCount(0);
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));

                    query.SetNullParameter( "@dt_val", eSDB_DateTime );

                    sql = "INSERT INTO #test_datetime(id, dt_field) "
                          "VALUES(1, @dt_val)";

                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(0);
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }


                // Retrieve data again ...
                {
                    sql = "SELECT * FROM #test_datetime";

                    // ClearParamList is necessary here ...
                    query.ClearParameters();
                    query.SetSql( sql );
                    query.Execute();
                    query.RequireRowCount(1);
                    BOOST_CHECK( query.HasMoreResultSets() );
                    CQuery::iterator it = query.begin();
                    BOOST_CHECK( it != query.end() );
                    BOOST_CHECK( it[2].IsNull());
                    BOOST_CHECK_NO_THROW(query.VerifyDone(CQuery::eAllResultSets));
                }
            }
        }
    }
    catch(const CException& ex) {
        DBAPI_BOOST_FAIL(ex);
    }
}