MSSQL Connection Plugin

The mssql_connection plugin allows Flutter applications to seamlessly connect to and interact with Microsoft SQL Server databases, offering rich functionality for querying and data manipulation.

๐Ÿš€ Now powered by Dart FFI + FreeTDS with support for Windows, Android, iOS, macOS, and Linux. Simplify SQL Server access with a small, consistent API. ๐Ÿ”—


Features

  • ๐Ÿ”„ Cross-Platform (FFI + FreeTDS): Windows, Android, iOS, macOS, Linux.
  • ๐Ÿ“Š Unified JSON: { columns: [...], rows: [...], affected: N } for reads/writes.
  • ๐Ÿ”’ Parameterized Queries: Call with getDataWithParams/writeDataWithParams to reduce injection risk.
  • ๐Ÿ”ง Transactions: beginTransaction, commit, rollback.
  • ๏ฟฝ Bulk Insert: High-throughput inserts using FreeTDS BCP.
  • โณ Timeouts + Reconnect: Login timeout and auto-reconnect on demand.

Installation

To use the MsSQL Connection plugin in your Flutter project, follow these simple steps:

  1. Add Dependency: Open your pubspec.yaml file and add the following:

    dependencies:
      mssql_connection: ^3.0.0
    

    Replace ^3.0.0 with the latest version.

  2. Install Packages: Run the following command to fetch the plugin:

    flutter pub get
    
  3. Import the Plugin: Include the plugin in your Dart code:

    import 'package:mssql_connection/mssql_connection.dart';
    
  4. Initialize Connection: Get an instance of MssqlConnection:

    MssqlConnection mssqlConnection = MssqlConnection.getInstance();
    

Usage/Examples

Example Screenshots

Connection Establishing Screen        Read & Write Operations Screen


Connect to Database

Establish a connection to the Microsoft SQL Server using the connect method with customizable parameters:

bool isConnected = await mssqlConnection.connect(
  ip: 'your_server_ip',
  port: 'your_server_port',
  databaseName: 'your_database_name',
  username: 'your_username',
  password: 'your_password',
  timeoutInSeconds: 15,
);

// `isConnected` returns true if the connection is established.

Get Data

Fetch data from the database using the getData method:

String query = 'SELECT * FROM your_table';
String result = await mssqlConnection.getData(query);

// `result` contains data in JSON format.

Write Data

Perform insert, update, or delete operations using the writeData method:

String query = 'UPDATE your_table SET column_name = "new_value" WHERE condition';
String result = await mssqlConnection.writeData(query);

// `result` contains details about the operation, e.g., affected rows.

Parameterized queries

Avoid manual string concatenation and let the library pass parameters safely via sp_executesql:

final res = await mssqlConnection.getDataWithParams(
  'SELECT * FROM Users WHERE Name LIKE @name AND IsActive = @active',
  {
    'name': '%john%',
    'active': true,
  },
);

Transactions

await mssqlConnection.beginTransaction();
try {
  await mssqlConnection.writeData('UPDATE Accounts SET Balance = Balance - 100 WHERE Id = 1');
  await mssqlConnection.writeData('UPDATE Accounts SET Balance = Balance + 100 WHERE Id = 2');
  await mssqlConnection.commit();
} catch (_) {
  await mssqlConnection.rollback();
  rethrow;
}

Bulk insertion

final rows = [
  {'Id': 1, 'Name': 'Alice'},
  {'Id': 2, 'Name': 'Bob'},
];
final inserted = await mssqlConnection.bulkInsert('dbo.Users', rows, batchSize: 1000);

---

### **Disconnect**

Close the database connection when it's no longer needed:

```dart
bool isDisconnected = await mssqlConnection.disconnect();

// `isDisconnected` returns true if the connection was successfully closed.

๐Ÿ”„ Version 3.0.0 Highlights

  • Cross-platform via Dart FFI + FreeTDS (Windows/Android/iOS/macOS/Linux).
  • Unified JSON response for reads/writes.
  • Parameterized queries, transactions, and bulk insertion.

๐Ÿ” Binary Data Handling (VARBINARY, BLOB, BINARY)

This plugin automatically handles binary columns like VARBINARY, BLOB, and BINARY by Base64 encoding their contents in the JSON output.

๐Ÿงช Example

SQL Query:

INSERT INTO Files (FileName, Data)
VALUES ('example.txt', CAST('This is some binary data' AS VARBINARY(MAX)));

Flutter Output:

{
  "columns": ["Id", "FileName", "Data"],
  "rows": [
    {"Id": 1, "FileName": "example.txt", "Data": "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRh"}
  ],
  "affected": 0
}

๐Ÿ“ฅ Decoding in Flutter

You can decode this data like this:

import 'dart:convert';

final base64Str = "VGhpcyBpcyBzb21lIGJpbmFyeSBkYXRh";
final bytes = base64Decode(base64Str);

// If the binary is actually plain text, decode it further
final decodedText = utf8.decode(bytes);
print(decodedText); // Output: This is some binary data

โš ๏ธ Note: Always decode the binary based on its original intentโ€”whether it's a file, an image, or plain text.


Contributing

Contributions to improve this plugin are welcome! To contribute:

  1. Fork the repository.
  2. Create a feature branch for your changes.
  3. Commit your changes with clear, concise messages.
  4. Push the branch and create a pull request.

For issues, suggestions, or feature requests, feel free to open an issue in the repository. Thank you for contributing to mssql_connection! ๐Ÿš€


Libraries

mssql_connection
Support for doing something awesome.