Microsoft Extensibility SDK for C# for SQL Server
Applies to: SQL Server 2019 (15.x) and later versions
Learn how you can implement a C# program for SQL Server using the Microsoft Extensibility SDK for .NET. The SDK is an interface for the .NET language extension that is used to exchange data with SQL Server and to execute C# code from SQL Server.
The code is open source and can be found on the SQL Server Language Extensions GitHub repository.
Implementation requirements
The SDK interface defines a set of requirements that need to be fulfilled for SQL Server to communicate with the .NET runtime. To use the SDK, you need to follow some implementation rules in your main class. SQL Server can then execute a specific method in C# and exchange data using the .NET language extension.
For an example of how you can use the SDK, see Tutorial: Search for a string using regular expressions (regex) in C#.
SDK classes
The SDK consists of several classes.
The abstract class
AbstractSqlServerExtensionExecutor
defines the interface the .NET extension uses to exchange data with SQL Server.Several helper classes implement the
CSharpDataSet
data set object.
In the following section, you find descriptions of each class in the SDK. The source code of the SDK classes is available in the SQL Server Language Extensions GitHub repository.
Class: AbstractSqlServerExtensionExecutor
The abstract class AbstractSqlServerExtensionExecutor
contains the interface used to execute C# code by the .NET language extension for SQL Server.
Your main C# class needs to inherit from this class. Inheriting from this class means that there are certain methods in the class you need to implement in your own class.
To inherit from this abstract class, you extend with the abstract class name in the class declaration, where MyClass
is the name of your class:
public class MyClass : AbstractSqlServerExtensionExecutor {}
At a minimum, your main class needs to implement the Execute(...)
method.
The Execute
method
The Execute
method is the method that is called from SQL Server via the .NET language extension, to invoke C# code from SQL Server. It's a key method where you include the main operations you wish to execute from SQL Server.
To pass method arguments to C# from SQL Server, use the @param
parameter in sp_execute_external_script
. The Execute
method takes its arguments that way.
public abstract DataFrame Execute(DataFrame input, Dictionary<string, dynamic> sqlParams);
The Init
method
The Init
method is executed after the constructor, and before the Execute
method. Any operations that need to be performed before Execute
can be done in this method.
public virtual void Init(string sessionId, int taskId, int numTasks);
Class: CSharpExtension
The class CSharpExtension
implements all language extensions APIs and returns results to native host.
Class: CSharpDataSet
The abstract class CSharpDataSet
contains the interface for handling input and output data used by the .NET extension.