Forum Discussion

frank_vanderstr's avatar
frank_vanderstr
Contributor
9 years ago

Cannot Connect to New Database Server using ADO

I have created automation scripts that used an ADO command object to connect to our internal server's databases and make several select, update and insert statements, and that would run great.

 

We recently migrated to a new database server and now even with the proper edits to my connection string, I can't appear to connect to the database despite the connection string test being a success.

 

Here is an example of my code.

 

var Qry = ADO.CreateADOCommand();

var dbname = DatabaseName;
Qry["ConnectionString"] = "Provider=SQLOLEDB.1;Password=pw;Persist Security Info=True;User ID=SQLServerUsr;Initial Catalog=dbname;Data Source=Servername";
for(var i = 1; i <= rowcount; i++) {
                   var testcell = VarToStr(xlsheet.Cells(i+1, 61).Value);
                     Log.Message(testcell);
                   tags[i] = testcell;
                  Qry["CommandText"] = "SELECT catalogid FROM oproducts WHERE oproducts.cname = '" + prodnamesarray[i] + "'"
                 Qry.CommandType = cmdText;
               var catalognum = Qry["Execute"]();
              prodids[i] = catalognum.Fields.Item("catalogid").Value;

}


for(var j = 1; j < rowcount; j++) {
            if(tags[j] != "") {
                   Qry["CommandText"] = "INSERT INTO MenuTagProductMap (MenuTagID, MenuProductID, EnteredDate) VALUES('" + tags[j] + "', '" + prodids[j] + "', GETDATE())";
                  Qry.CommandType = cmdText;
}
}

 

I also made my connection string by using the stores object in testcomplete to connect to my database initially.

 

I was made aware of permission changes on the new server, but I have had my test user given the proper permissions, but it doesn't appear to be connecting still, anyone have any ideas as to why this may be?

  • The error occurs on the first instance of calling Qry[Execute], so the first loop where I call SELECT.

  • I was able to figure out the root cause of the issue with some help.

     

    Turns out TestComplete likes to leave out "\" in strings, so putting \\ in my connection string got me connected properly.

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Hrm... ok, then... thanks for trying.

    I'm not certain, at this point, what the next step is. It seems that something within the permissions are blowing up.

    Do you have access to the server side logs? Is there a way you can find out whether or not the server is receiving the correct information. Also, try writing out the connection string to the test log to make sure that nothing is getting sent improperly.

    Perhaps someone else may have another direction to try.
  • I was able to figure out the root cause of the issue with some help.

     

    Turns out TestComplete likes to leave out "\" in strings, so putting \\ in my connection string got me connected properly.

    • eqrojas's avatar
      eqrojas
      New Contributor

      Just also make my connection string to '\\' and it works!

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    That would do it.

    FYI, that leaving out of the \ I'd actually a function of the language you are using. In some of the languages supported by TestComplete, that symbol is used to mark a special character like \' to actually print the single quote rather than terminate a string. So, to tell TC to actually include the \ character you need to double it up. I should have caught that in your earlier example.
  • AlexKaras's avatar
    AlexKaras
    Champion Level 3

    Hi,

     

    -- Is it *only* the name of the database server that changed with *everything* else left as it was?

    -- What is the error (error code, error text, anything else) that is returned on connect failure?

    -- Can you connect to this server from some other tool (command-line, management console, etc.) using the same machine and user (both Windows and database ones)?

    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      From what I was told the permissions of non Database Administrator users has changed, but I did have a special user made that should have the permissions needed.

       

      The specific error is Microsoft OLE DB Provider for SQL Server. :[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.

       

      I was also able to connect to the server from SQL Manager using the created user. The test connection is also a success when using the TestComplete Database Objects.

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Double check some things concerning your username, password etc... make sure there are no "special" charcaters that may need special handling to be passed through properly.
    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      Yup, no special characters in either unless "_" counts.

       

      Password is a combination of upper and lowercase letters and numbers.

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Just out of curiosity. ... have your tried creating an ADO query object instead of a command object? Or just simply create and ADO Connection object just to make sure that works. It seems strange that the connection string works fine in TC in one specific situation but not when creating ADO objects, almost like the new permissions are preventing certain kinds of operations
    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      I have not tried creating and ADO query object, as the ADO command was the most easy for me to understand and execute in code.

       

      Permissions might be the culprit, but the user on SQL has the needed permissions for executing Selects and Updates.

       

      Connecting seems to work but when I go to execute a sql statement I get the error.

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Well, you aren't doing a Select or Update... you're doing an Insert... not sure how granular permissions can go in MS SQL but perhaps that's the cuplrit?
  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Is that where they error is generating? I perhaps missed it but is it possible that the error is happening on the Insert and not the Select?
    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      The error occurs on the first instance of calling Qry[Execute], so the first loop where I call SELECT.

    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      Creating the ADO Connection object seems to be redundant code, as you are just setting the Command Objects Connection String to the Connection object, and calling Execute opens the connection with the connection string set in the Command Object.

       

       

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor
    Totally agree with that assessment. But comparing what you have with Microsofts published example, that seems to be the only major difference. Id at least give it a try. But I'll keep researching in the meantime
    • frank_vanderstr's avatar
      frank_vanderstr
      Contributor

      Afraid using the connection object caused a log in prompt to appear when trying to connect even with the user info in the connection string.

       

      It also caused an error I could not exit from, as a pop up window saying the thread was not synchronized would not close.