ADO.NET - 1.2
Description
This extension provides support for SQL query execution
calls under ADO.NET using C# language.
Function Point, Quality and Sizing support
- Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
- Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
| Function Points (transactions) |
Quality and Sizing |
| ✅ |
❌ |
Supported ADO.NET Data Providers
Summary
Method Details
IBM
IBM.Data.DB2 — Db2 .NET Provider
| Class |
Methods |
IBM.Data.DB2.DB2Command |
ExecuteReader
ExecutePageReader
ExecuteNonQuery
ExecuteResultSet
ExecuteScalar
ExecuteXmlReader
ExecuteRow |
IBM.Data.DB2.DB2BulkCopy |
WriteToServer |
IBM.Data.DB2.DB2DataAdapter |
Fill
FillSchema
Update |
IBM.Data.DB2.Core — Db2 .NET Provider for .NET Core
| Class |
Methods |
IBM.Data.DB2.Core.DB2Command |
ExecuteReader
ExecutePageReader
ExecuteNonQuery
ExecuteResultSet
ExecuteScalar
ExecuteXmlReader
ExecuteRow |
IBM.Data.DB2.Core.DB2BulkCopy |
WriteToServer |
IBM.Data.DB2.Core.DB2DataAdapter |
Fill
FillSchema
Update |
IBM.Data.DB2.iSeries — IBM iSeries Db2 .NET Provider
| Class |
Methods |
IBM.Data.DB2.iSeries.iDB2Command |
ExecuteReader
ExecuteNonQuery
ExecuteScalar
ExecuteXmlReader |
IBM.Data.DB2.iSeries.iDB2DataAdapter |
Fill
FillSchema
Update |
| Class |
Methods |
IBM.Data.Informix.IfxCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar |
Microsoft
Microsoft.Data.SqlClient — .NET Data Provider for SQL Server
| Class |
Methods |
Microsoft.Data.SqlClient.SqlCommand |
ExecuteReader
ExecuteReaderAsync
BeginExecuteReader
ExecuteNonQuery
ExecuteNonQueryAsync
BeginExecuteNonQuery
ExecuteScalar
ExecuteScalarAsync
ExecuteXmlReader
ExecuteXmlReaderAsync
BeginExecuteXmlReader |
Microsoft.Data.SqlClient.SqlBulkCopy |
WriteToServer
WriteToServerAsync |
Microsoft.Data.SqlClient.SqlDataAdapter |
Fill
FillSchema
Update |
System.Data.SqlClient — .NET Data Provider for SQL Server
| Class |
Methods |
System.Data.SqlClient.SqlCommand |
ExecuteReader
ExecuteReaderAsync
BeginExecuteReader
ExecuteNonQuery
ExecuteNonQueryAsync
BeginExecuteNonQuery
ExecuteScalar
ExecuteScalarAsync
ExecuteXmlReader
ExecuteXmlReaderAsync
BeginExecuteXmlReader |
System.Data.SqlClient.SqlBulkCopy |
WriteToServer
WriteToServerAsync |
System.Data.SqlClient.SqlDataAdapter |
Fill
FillSchema
Update |
Microsoft.Data.Sqlite — .NET Data Provider for SQLite
| Class |
Methods |
Microsoft.Data.Sqlite.SqliteCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
System.Data.SQLite — .NET Data Provider for SQLite
| Class |
Methods |
System.Data.SQLite.SQLiteCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync
Execute |
System.Data.SQLite.SQLiteDataAdapter |
Fill
FillSchema
Update |
System.Data.OracleClient — .NET Data Provider for Oracle
| Class |
Methods |
System.Data.OracleClient.OracleCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteOracleNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteOracleScalar
ExecuteScalarAsync |
System.Data.OracleClient.OracleDataAdapter |
Fill
FillSchema
Update |
System.Data.OleDb — .NET Data Provider for OLE DB
| Class |
Methods |
System.Data.OleDb.OleDbCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
System.Data.OleDb.OleDbDataAdapter |
Fill
FillSchema
Update |
System.Data.Odbc — .NET Data Provider for ODBC
| Class |
Methods |
System.Data.Odbc.OdbcCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
System.Data.Odbc.OdbcDataAdapter |
Fill
FillSchema
Update |
System.Data.EntityClient — .NET Data Provider for Entity Framework
| Class |
Methods |
System.Data.EntityClient.EntityCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar |
System.Data.Entity.Core.EntityClient — .NET Core Data Provider for Entity Framework
| Class |
Methods |
System.Data.Entity.Core.EntityClient.EntityCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar |
System.Data.SqlServerCe — .NET Data Provider for SQL Server Compact
| Class |
Methods |
System.Data.SqlServerCe.SqlCeCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar
ExecuteResultSet |
System.Data.Common — ADO.NET Common Provider Interfaces
| Class |
Methods |
System.Data.Common.DbCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
System.Data.Common.DbBatch |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
System.Data.Common.DbDataAdapter |
Fill
FillSchema
Update |
System.Data.Linq — LINQ to SQL
| Class |
Methods |
System.Data.Linq.DataContext |
ExecuteCommand
ExecuteQuery |
System.Data.Linq.Table |
InsertOnSubmit
DeleteOnSubmit InsertAllOnSubmit
DeleteAllOnSubmit GetEnumerator |
System.Linq — LINQ to SQL
| Class |
Methods |
System.Linq.Enumerable |
ToArray
ToList
ToDictionary
ToHashSet
ToLookup |
System.Linq.Queryable |
All
Any
Average
Contains
Count
ElementAt
ElementAtOrDefault
First
FirstOrDefault
Last
LastOrDefault
LongCount
Max
Min
Single
SingleOrDefault
Sum |
MySQL
MySql.Data.MySqlClient — MySQL Connector/NET
| Class |
Methods |
MySql.Data.MySqlClient.MySqlCommand |
ExecuteReader
ExecuteReaderAsync
BeginExecuteReader
ExecuteNonQuery
ExecuteNonQueryAsync
BeginExecuteNonQuery
ExecuteScalar
ExecuteScalarAsync |
MySql.Data.MySqlClient.MySqlDataAdapter |
Fill
FillSchema
Update |
MySqlConnector — MySqlConnector ADO.NET provider
| Class |
Methods |
MySqlConnector.MySqlCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
MySqlConnector.MySqlBatch |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
MySqlConnector.MySqlBulkCopy |
WriteToServer
WriteToServerAsync |
MySqlConnector.MySqlBulkLoader |
Load
LoadAsync |
MySqlConnector.MySqlDataAdapter |
Fill
FillSchema
Update |
Oracle Server
Oracle.DataAccess.Client — Unmanaged Driver
| Class |
Methods |
Oracle.DataAccess.Client.OracleCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar
ExecuteXmlReader
ExecuteStream
ExecuteToStream |
Oracle.DataAccess.Client.OracleBulkCopy |
WriteToServer |
Oracle.DataAccess.Client.OracleDataAdapter |
Fill
FillSchema
Update |
Oracle.ManagedDataAccess.Client — Managed Driver
| Class |
Methods |
Oracle.ManagedDataAccess.Client.OracleCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar
ExecuteXmlReader
ExecuteStream
ExecuteToStream |
Oracle.ManagedDataAccess.Client.OracleBulkCopy |
WriteToServer |
Oracle.ManagedDataAccess.Client.OracleDataAdapter |
Fill
FillSchema
Update |
Devart
Devart.Common — Devart’s dotConnect
| Class |
Methods |
Devart.Common.DbCommandBase |
ExecutePageReader
BeginExecuteReader
ExecuteNonQuery
BeginExecuteNonQuery
ExecuteScalar |
Devart.Common.SqlStatement |
Execute
ExecuteNonQuery |
Devart.Common.DbScript |
Execute
ExecuteNext |
Devart.Common.DbDataAdapter |
FillPage |
Devart.Data.Oracle — Devart’s dotConnect for Oracle
| Class |
Methods |
Devart.Data.Oracle.OracleCommand |
ExecuteReader
ExecutePageReader
ExecuteNonQuery
ExecuteScalar
ExecuteArray |
Devart.Data.Oracle.OracleDataAdapter |
Fill
FillPage
FillSchema
Update |
Devart.Data.MySql — Devart’s dotConnect for MySql
| Class |
Methods |
Devart.Data.MySql.MySqlCommand |
ExecuteReader
BeginExecuteReader
ExecutePageReader |
Devart.Data.MySql.MySqlHelper |
ExecuteReader
ExecuteNonQuery
ExecuteScalar |
Devart.Data.MySql.MySqlStatement |
Execute |
Devart.Data.MySql.MySqlDataAdapter |
Fill
FillPage
FillSchema
Update |
Devart.Data.SQLite — Devart’s dotConnect for SQLite
| Class |
Methods |
Devart.Data.SQLite.SQLiteCommand |
ExecuteReader
ExecutePageReader |
Devart.Data.SQLite.SQLiteDataAdapter |
Fill
FillSchema
Update (overridden from System.Data.Common) |
Devart.Data.PostgreSql — Devart’s dotConnect for PostgreSql
| Class |
Methods |
Devart.Data.PostgreSql.PgSqlCommand |
ExecuteReader
ExecutePageReader |
Devart.Data.PostgreSql.PgSqlDataAdapter |
Fill
FillSchema
Update (overridden from System.Data.Common) |
Devart.Data.Linq — Devart’s dotConnect for LINQ to SQL
| Class |
Methods |
Devart.Data.Linq.DataContext |
ExecuteCommand
ExecuteQuery |
PostgreSQL
Npgsql — .NET Data Provider for PostgreSQL
| Class |
Methods |
Npgsql.NpgsqlCommand |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
Npgsql.NpgsqlBatch |
ExecuteReader
ExecuteReaderAsync
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
Npgsql.NpgsqlDataAdapter |
Fill
FillSchema
Update |
Praeclarum
SQLite — Praeclarum SQLite ADO.NET Provider
| Class |
Methods |
SQLite.SQLiteCommand |
ExecuteQuery
ExecuteDeferredQuery
ExecuteNonQuery
ExecuteScalar
ExecuteQueryScalars |
SQLite.SQLiteConnection |
Execute
ExecuteScalar
Query
QueryScalars
DeferredQuery GetTableInfo DropTable
CreateTable
CreateTables Get
Find
FindWithQuery Insert
InsertAll
InsertOrReplace Update
UpdateAll
Delete
DeleteAll |
SQLite.SQLiteAsyncConnection |
CreateTableAsync
CreateTablesAsync
DropTableAsync InsertAsync
InsertAllAsync
InsertOrReplaceAsync UpdateAsync
UpdateAllAsync
DeleteAsync
DeleteAllAsync GetAsync
FindAsync
FindWithQueryAsync GetTableInfoAsync ExecuteAsync
ExecuteScalarAsync
QueryAsync
QueryScalarsAsync
DeferredQueryAsync |
SAP ASE
Sybase.Data.AseClient — .NET Data Provider for Sybase ASE
| Class |
Methods |
Sybase.Data.AseClient.AseCommand |
ExecuteReader
BeginExecuteReader
ExecuteNonQuery
BeginExecuteNonQuery
ExecuteScalar
ExecuteXmlReader
BeginExecuteXmlReader |
Sybase.Data.AseClient.AseDataAdapter |
Fill
FillSchema
Update |
AdoNetCore.AseClient — .NET Core Data Provider for Sybase ASE
| Class |
Methods |
AdoNetCore.AseClient.AseCommand |
ExecuteReader
ExecuteNonQuery
ExecuteScalar
ExecuteXmlReader |
AdoNetCore.AseClient.AseDataAdapter |
Fill
FillSchema
Update |
Teradata
Teradata.Client.Provider — .NET Data Provider for Teradata
| Class |
Methods |
Teradata.Client.Provider.TdCommand |
ExecuteReader
ExecuteReaderAsync
BeginExecuteReader
ExecuteNonQuery
ExecuteNonQueryAsync
BeginExecuteNonQuery
ExecuteScalar
ExecuteScalarAsync
ExecuteCreateProcedure |
Teradata.Client.Provider.TdDataAdapter |
Fill
FillSchema
Update |
Snowflake
Snowflake.Client — .NET Client for Snowflake DB REST API
| Class |
Methods |
Snowflake.Client.SnowflakeClient |
ExecuteAsync
ExecuteScalarAsync
QueryAsync
QueryRawResponseAsync |
Snowflake.Data.Client — Snowflake Connector for .NET
| Class |
Methods |
Snowflake.Data.Client.SnowflakeDbCommand |
ExecuteNonQuery
ExecuteNonQueryAsync
ExecuteScalar
ExecuteScalarAsync |
Spring
Spring.Data.Generic — Spring Data Generic ADO.NET Provider
| Class |
Methods |
Spring.Data.Generic.AdoTemplate |
Execute ExecuteNonQuery ExecuteScalar QueryForObject
QueryForObjectDelegate QueryWithCommandCreator QueryWithResultSetExtractor
QueryWithResultSetExtractorDelegate QueryWithRowCallback
QueryWithRowCallbackDelegate QueryWithRowMapper
QueryWithRowMapperDelegate |
Spring.Data.Core — Spring Data Core ADO.NET Provider
| Class |
Methods |
Spring.Data.Core.AdoTemplate |
DataSetCreate
DataSetCreateWithParams
DataSetFill
DataSetFillWithParameters DataSetUpdate
DataSetUpdateWithCommandBuilder DataTableCreate
DataTableCreateWithParams
DataTableFill
DataTableFillWithParams DataTableUpdate
DataTableUpdateWithCommandBuilder Execute ExecuteNonQuery ExecuteScalar QueryForObject
QueryForObjectDelegate QueryWithCommandCreator QueryWithResultSetExtractor
QueryWithResultSetExtractorDelegate QueryWithRowCallback
QueryWithRowCallbackDelegate
QueryWithRowMapper
QueryWithRowMapperDelegate |
LinqToDB
LinqToDB.Mapping
| Class |
Methods |
LinqToDB.Mapping.EntityMappingBuilder |
HasTableName |
LinqToDB.DataExtensions
| Class |
Methods |
LinqToDB.DataExtensions |
CreateTable
CreateTableAsync
DropTable
DropTableAsync Insert
InsertAsync
InsertOrReplace
InsertOrReplaceAsync
InsertWithIdentity
InsertWithInt32Identity
InsertWithInt64Identity
InsertWithDecimalIdentity Update
UpdateAsync
Delete
DeleteAsync |
LinqToDB.AsyncExtensions
| Class |
Methods |
LinqToDB.AsyncExtensions |
AllAsync
AnyAsync
AverageAsync
FirstAsync
FirstOrDefaultAsync
SingleAsync
SingleOrDefaultAsync
ContainsAsync
CountAsync
LongCountAsync
MinAsync
MaxAsync
SumAsync
ToListAsync
ToArrayAsync
ToDictionaryAsync
ForEachAsync
ForEachUntilAsync |
LinqToDB.LinqExtensions
| Class |
Methods |
LinqToDB.LinqExtensions |
Update
UpdateAsync
Delete
DeleteAsync
Insert
InsertAsync InsertWithIdentity
InsertWithInt32Identity
InsertWithInt64Identity
InsertWithDecimalIdentity
InsertWithIdentityAsync
InsertWithInt32IdentityAsync
InsertWithDecimalIdentityAsync InsertOrUpdate
InsertOrUpdateAsync
Drop
DropAsync
Truncate
TruncateAsync |
ServiceStack
ServiceStack.DataAnnotations
| Attribute |
ServiceStack.DataAnnotations.AliasAttribute |
ServiceStack.OrmLite
| Class |
Methods |
ServiceStack.OrmLite.OrmLiteSchemaApi |
CreateTable
CreateTables
CreateTableIfNotExists
DropAndCreateTable
DropAndCreateTables
DropTable
DropTables |
ServiceStack.OrmLite.OrmLiteReadApi |
Select
SelectFmt
SelectByIds
SelectNonDefaults
SelectLazy
SelectLazyFmt Where
WhereLazy
Single
SingleFmt
SingleById
SingleWhere Scalar
ScalarFmt
Column
ColumnFmt
ColumnLazy
ColumnDistinct
ColumnDistinctFmt Lookup
Dictionary
KeyValuePairs Exists
SqlList
SqlColumn
SqlScalar LoadSingleById
LoadReferences Select
SelectMulti
Single
Scalar
Count
RowCount
LoadSelect |
ServiceStack.OrmLite.OrmLiteWriteApi |
ExecuteSql Insert
InsertUsingDefaults
InsertIntoSelect
InsertAll
BulkInsert Update
UpdateAll
Delete
DeleteAll
DeleteNonDefaults
DeleteById
DeleteByIds Save
SaveAll
SaveReferences
ExecuteProcedure Update
UpdateAdd
UpdateOnly
UpdateOnlyFields
UpdateNonDefaults |
ServiceStack.OrmLite.OrmLiteWriteExpressionsApi |
InsertOnly
Delete
DeleteWhere |
What results can you expect?
Objects
The following objects are created by the extension:
| Icon |
Object type Description |
When is this object created ? |
 |
Dotnet Ado Query |
An object is created for each SQL query found and resolved in an Dotnet CRUD method call |
 |
DotNet Unknown ADO Query |
An object is created for each SQL query found but could not be resolved correctly in an Dotnet CRUD method call, only one is created per real caller |
 |
DotNet ADO Entity |
An object is created for each entity found and resolved in an Dotnet CRUD method call |
 |
DotNet ADO Entity Operation |
An object is created for each entity operation found and resolved in an Dotnet CRUD method call |
Links
The following links will be created by the Ado.Net extension, or by
alternate extensions.
| Link type |
Real caller type |
Callee type |
Additional information |
| callLink |
C# Method |
 |
Created by this analyser - Dotnet Ado |
| callLink |
C# Method |
 |
Created by this analyser - Dotnet Ado |
| callLink |
C# Method |
 |
Created by this analyser - Dotnet Ado |
| callLink |
C# Method |
 |
Created by this analyser - Dotnet Ado |
| relyonLink |
 |
 |
Created by this analyser - Dotnet Ado |
| useLink |
 |
 |
Created by Sql analyser |
| useLink |
 |
 |
Created by Sql analyser |
| callLink |
 |
 |
Created by Sql analyser |
| useLink |
 |
 |
Created by Missing tables and procedures for .NET when the object is not analyzed |
| callLink |
 |
 |
Created by Missing tables and procedures for .NET when the object is not analyzed |
Git samples
DirectSQL-main\TestSqlLiteDatabase\SqlResultTest.cs
private static void CreateTableForTest(IDbConnection connection)
{
using (var command = connection.CreateCommand())
{
command.CommandText =
"create table " +
"TEST_TABLE(" +
"TEST_COL1 text," +
"TEST_COL2 integer" +
")";
command.ExecuteNonQuery();
}
}
One Ado object is created:

DirectSQL-main\TestSqlLiteDatabase\QueryDefaultTransaction.cs
private static void CreateTableForTest(IDbConnection connection)
{
using( var command = connection.CreateCommand())
{
command.CommandText =
"create table " +
"TEST_TABLE(" +
"TEST_VAL1 text," +
"TEST_VAL2 integer" +
")";
command.ExecuteNonQuery();
}
}
One Ado object is created:

ASPNetCore_ADO-master\EmployeeManagement\Models\EmployeeDataAccessLayer.cs
public Employee GetEmployeeData(int? id)
{
Employee employee = new Employee();
using (SqlConnection con = new SqlConnection(connectionString))
{
string sqlQuery = "SELECT * FROM tblEmployee WHERE EmployeeID= " + id;
SqlCommand cmd = new SqlCommand(sqlQuery, con);
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
employee.ID = Convert.ToInt32(rdr["EmployeeID"]);
employee.Name = rdr["Name"].ToString();
employee.Gender = rdr["Gender"].ToString();
employee.Department = rdr["Department"].ToString();
employee.City = rdr["City"].ToString();
}
}
return employee;
}
One Ado object is created:

Test case
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace Test01_linq_sql
{
[Table(Name = "CustomerInfo")]
public class CustomerData
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public int CustomerId { get; set; }
[Column]
public string CustomerName { get; set; } = default!;
[Column]
public string FirstName { get; set; } = default!;
[Column]
public string Contact { get; set; } = default!;
[Column]
public string Address { get; set; } = default!;
[Column]
public string City { get; set; } = default!;
[Column]
public string PostalCode { get; set; } = default!;
[Column]
public string Country { get; set; } = default!;
}
public class Program
{
static void Main(string[] args)
{
string connectionStr = "Data Source=.;database=AdoNet;Integrated Security=SSPI;";
DataContext AdoNetDb = new DataContext(connectionStr);
Table<CustomerData> CustomerTable = AdoNetDb.GetTable<CustomerData>();
// display values after reading
foreach(var line in CustomerTable)
{
Console.WriteLine(line.CustomerName);
}
// Create a new Order object
CustomerTable.InsertOnSubmit(
new CustomerData
{
CustomerName = "Can1",
FirstName = "Furrya",
Contact = "trans_tarzan_of_the_jungle@gmail.com",
Address = "Amazonia",
City = "NoWhere",
PostalCode = "XXXXXX",
Country = "Brazil"
}
);
CustomerData ord = new CustomerData
{
// CustomerId = 6,
CustomerName = "De La Crème",
FirstName = "Thierry",
Contact = "itsmaam@gmail.com",
Address = "Down town LA",
City = "California",
PostalCode = "XXXXXX",
Country = "Murika"
};
CustomerTable.InsertOnSubmit(ord);
AdoNetDb.SubmitChanges();
IEnumerable<CustomerData> productQuery =
from prod in CustomerTable
where prod.CustomerId == 3
select prod;
foreach(var i in productQuery)
{
Console.WriteLine(i.CustomerName);
}
CustomerTable.DeleteOnSubmit(ord);
AdoNetDb.SubmitChanges();
IEnumerable<CustomerData> productQuery2 =
from prod in CustomerTable
select prod;
foreach(var i in productQuery2)
{
Console.WriteLine(i.CustomerName);
}
}
}
}
4 Ado objects are created:

Limitations
- In case of dotnet ado query object, each evaluation that results in standard exception or empty value will lead to one unknown object creation. Also, failure in value conversion will create unknown object.
- As of now, there isn’t any creation for either unknown entity or its operation. If a vital information is missing, the extension will jump to the next evaluation to begin a new process.
- Some query objects need better fitlering to determine if their values should be considered unknown.
- Support for Linq To Dataset is not covered in this release.