Hi,
I am trying to edit trends in bulk on a ClearSCADA server that has two databases (just for dev, not running full time this way). We can connect to the first instance running on the default port (5481) just fine but I cannot seem to get onto the second instance even when we specify the system name and host name. I assume we need to specify the port somehow.
using (Connection connection = new Connection(_systemName))
{
connection.Connect(_hostName); // I cannot specify port on this line? Should be able to, no? Simple Client doesn't have more arguments for this function...
WriteVerbose("Connected to ClearSCADA");
WriteVerbose(string.Format("Try to get ID for object '{0}'", ObjFullName));
string templateIdQuery = string.Format("SELECT ID, FULLNAME FROM CTEMPLATE WHERE FULLNAME='{0}'",
ObjFullName);
int templateId = -1;
using (var query = connection.Server.PrepareQuery(templateIdQuery, new QueryParseParameters()))
{
var results = query.ExecuteSync(new QueryExecuteParameters());
if (results.Rows.Count == 0)
{
throw new Exception("Did not find template");
}
WriteVerbose(string.Format("Query returned {0} rows", results.Rows.Count));
templateId = (int)results.Rows.ElementAt(0).Data[0];
WriteVerbose(string.Format("ID for '{0}' is {1}", ObjFullName, templateId));
}
// ... more code here...
}
Solved! Go to Solution.
There is an overload for the Connection.Connect() which takes a ServerNode object.
So instead of
connection.Connect(_hostName);
try (untested)
var srvNode = new ServerNode(ConnectionType.Standard, _hostName, _portNum);
connection.Connect(srvNode);
You could inline them into just the one line if you wanted.. although there might be a few more tickboxes that you want to adjust on the ServerNode object (like whether to use Compression, what Timeout settings to use, etc).
EDIT: Replaced use of 'auto' (C++) for 'var' (C#)
That is really close! I ended up having to tweak a little bit for my app (the auto keyword didn't work for me):
using (Connection connection = new Connection(_systemName))
{
ServerNode srvNode = new ServerNode(ConnectionType.Standard, _hostName, Int32.Parse(_portNumber));
connection.Connect(srvNode);
// code here...
}
Thanks Bevan!
There is an overload for the Connection.Connect() which takes a ServerNode object.
So instead of
connection.Connect(_hostName);
try (untested)
var srvNode = new ServerNode(ConnectionType.Standard, _hostName, _portNum);
connection.Connect(srvNode);
You could inline them into just the one line if you wanted.. although there might be a few more tickboxes that you want to adjust on the ServerNode object (like whether to use Compression, what Timeout settings to use, etc).
EDIT: Replaced use of 'auto' (C++) for 'var' (C#)
That is really close! I ended up having to tweak a little bit for my app (the auto keyword didn't work for me):
using (Connection connection = new Connection(_systemName))
{
ServerNode srvNode = new ServerNode(ConnectionType.Standard, _hostName, Int32.Parse(_portNumber));
connection.Connect(srvNode);
// code here...
}
Thanks Bevan!
Sorry on the 'auto'.. that's me slipping between languages too fluidly.
In C# it should have been 'var'
It just means, don't make me explicitly list the type here, deduce it from the right hand value.
i.e. = new ServerNode() clearly returns a ServerNode, so I shouldn't have to write ServerNode node = new ServerNode()
The compiler can work that out, so (in C++) I could just write:
auto node = new ServerNode()
and in C#
var node = new ServerNode()
I think I prefer the auto keyword myself, but I believe that C# used it elsewhere for a different meaning
Discuss challenges in energy and automation with 30,000+ experts and peers.
Find answers in 10,000+ support articles to help solve your product and business challenges.
Find peer based solutions to your questions. Provide answers for fellow community members!