Updating existing applications
The latest 1010data .NET SDK is designed for developing applications in a style that is more closely compatible with .NET development, specifically object-oriented programming.
Applications developed with the original 1010data .NET SDK must be updated to use the
object-oriented 1010data .NET SDK. When you're updating your existing application, keep
that applications developed for the original 1010data .NET SDK:
- Required you to instantiate exactly one instance of the
CppCLISDK1010class. The object-oriented 1010data .NET SDK does not require you to instantiate any instance of theCppCLISDK1010class. - Required you to synchronize multiple threads yourself. The object-oriented
1010data .NET SDK, handles thread synchronization. As a best practice, each
thread should create its own
Sessionobject. For more information, see Best practices or Establishing a session. - Required you to check for error codes after each method invocation. The object-oriented .NET SDK uses an exception-based model. For more information, see Exception handling.
- Required applications using a SAM pool to manually acquire a UID via calls to
GetUID1010. In the object-oriented 1010data .NET SDK, this is not required. For more information, see Shared Access Management (SAM). - Required you to manually clean up a 1010data Insights Platform session. In the
object-oriented .NET SDK, you can take advantage of the
usingpattern, which cleans up the session automatically.
This example contains code written for the original 1010data .NET SDK:
using System;
public class PrintTable {
public static void Main(String[] args) {
CppCLISDK1010 link;
int login;
String username = "USERNAME";
String password = "PASSWORD";
String gateway;
String queryXML;
String tablePath;
int queryID, block, windowSize, finRows;
long numRows;
String[][] colInfo;
Object[][] table;
gateway = "https://www2.1010data.com/cgi-bin/gw";
queryXML = "<sel value=\"(year>1900)\"/>";
tablePath = "pub.demo.baseball.batting";
windowSize = 10000;
block = 40000;
finRows = 0;
// Create exactly one CppCLISDK1010 Object.
link = new CppCLISDK1010();
login = link.login1010(gateway, username, password, 1);
// We need to check the return code after every action to
// make sure it succeeded.
if (login < 0) {
Console.Error.WriteLine("Failed " + login + ": " +
link.msg1010(login));
Environment.Exit(1);
}
try {
queryID = link.newquery1010();
if(queryID < 0) {
Console.Error.WriteLine("Failed to create query: (" +
link.rc1010(login) + ") " +
link.msg1010(login));
Environment.Exit(1);
}
// -2 is COMPRESSED_BINARY
link.querymode1010(queryID, windowSize, -2);
link.prepquery1010(queryID, tablePath, queryXML);
// Run the query.
if(link.runquery1010(login, queryID) < 0) {
Console.Error.WriteLine("Failed to run query: (" +
link.rc1010(login) + ") " +
link.msg1010(login));
Environment.Exit(1);
}
colInfo = link.querycols1010(queryID);
if(colInfo == null) {
Console.Error.WriteLine("Failed to get column info: (" +
link.rc1010(login) + ") " +
link.msg1010(login));
Environment.Exit(1);
}
numRows = link.queryrows1010(queryID);
// For testing, limit the number of rows to 5000.
numRows = Math.Min(5000, numRows);
block = 1000;
while (finRows < numRows) {
// Pull down one block at a time.
// Start at finRows and get all the columns.
table = link.getdataRM1010(queryID, finRows, block, colInfo);
if(table == null) {
Console.Error.WriteLine("Failed to get data: (" +
link.rc1010(login) + ") " +
link.msg1010(login));
Environment.Exit(1);
}
finRows += block;
// For each row in this block...
for (int i = 0; i < table.Length; i++) {
// for each column in this row...
for (int j = 0; j < table[i].Length; j++) {
Console.Write(table[i][j] + "\t");
}
Console.WriteLine();
}
// It is important to set the table to null
// when you are finished using it.
table = null;
}
}
finally {
link.logout1010(login);
}
}
}
This example contains code written for the object-oriented 1010data .NET SDK:
using System;
using System.Linq;
using TenTenSDK;
public class PrintTable
{
public static void Main(string[] args) {
String username;
String password;
Uri gateway;
String queryXML;
String tablePath;
Session session;
Query query;
Table results;
username = "USERNAME";
password = "PASSWORD";
gateway = new Uri("https://www2.1010data.com/cgi-bin/gw");
queryXML = "<sel value=\"(year>1900)\"/>";
tablePath = "pub.demo.baseball.batting";
try {
using (session = new Session(gateway, username, password, LoginType.POSSESS)) {
query = new Query(tablePath, queryXML);
using (results = query.RunOn(session)) {
int count = 0;
foreach (Row row in results.Rows) {
Console.WriteLine(String.Join("\t", row.Select(d => d.ToString())));
count++;
// Limit rows to 5000 for testing purposes.
if (count > 5000) {
break;
}
}
}
}
}
catch (TenTenSDK.Exceptions.TenTenException exc) {
Console.Error.WriteLine("1010 Exception occurred: " + exc.ToString());
}
}
}
