mssql_io 0.0.2
mssql_io: ^0.0.2 copied to clipboard
Flutter plugin for Microsoft SQL Server using FFI and FreeTDS. Cross-platform support.
MSSQL IO #
A Flutter plugin for connecting to Microsoft SQL Server. Supports Android, iOS, Windows, macOS, Linux, and Web.
Features #
- Direct FFI access for high performance
- Parameterized queries to prevent SQL injection
- Transaction support (BEGIN, COMMIT, ROLLBACK)
- Bulk insert operations
- Cross-platform compatibility
Installation #
dependencies:
mssql_io: ^0.0.2
flutter pub get
Setup #
Mobile (Android & iOS) #
# Android
cd android && ./build_freetds.sh
# iOS (requires macOS)
cd ios && ./build_freetds.sh
First build takes 10-15 minutes (builds FreeTDS library). Subsequent builds are fast.
Desktop #
macOS:
brew install freetds
Linux:
sudo apt-get install freetds-dev
Windows:
vcpkg install freetds:x64-windows
Web #
Web applications require a backend API server to proxy SQL Server connections (for security).
// Configure web API endpoint
MssqlIoWeb.getInstance().configure(
apiBaseUrl: 'https://your-api.com/sql',
authToken: 'your-auth-token',
);
// Execute queries via API
final result = await MssqlIoWeb.getInstance().executeQuery(
'SELECT * FROM Users',
);
Note: Never expose database credentials in web applications. Always use a secure backend API.
Usage #
import 'package:mssql_io/mssql_io.dart';
// Connect
final request = MssqlConnection.getInstance();
await request.connect(
host: '192.168.1.100',
databaseName: 'MyDB',
username: 'sa',
password: 'Password123',
);
// Query
final result = await request.getData('SELECT * FROM Users');
for (final row in result.rows) {
print('User: ${row['Name']}');
}
// Disconnect
await request.disconnect();
Common Examples #
Parameterized Queries (Prevents SQL Injection) #
final result = await request.getDataWithParams(
'SELECT * FROM Users WHERE Age > @age',
[SqlParameter(name: 'age', value: 18)],
);
Insert/Update/Delete #
final rows = await request.writeDataWithParams(
'INSERT INTO Users (Name, Email) VALUES (@name, @email)',
[
SqlParameter(name: 'name', value: 'Alice'),
SqlParameter(name: 'email', value: 'alice@example.com'),
],
);
print('Inserted $rows rows');
Transactions #
await request.beginTransaction();
try {
await request.writeData('INSERT INTO Orders VALUES (1, 99.99)');
await request.writeData('UPDATE Inventory SET Stock = Stock - 1');
await request.commit();
} catch (e) {
await request.rollback();
}
Bulk Insert #
final rows = List.generate(1000, (i) => {'Name': 'User$i', 'Age': 20 + i});
await request.bulkInsert('Users', rows, batchSize: 500);
API #
Main Methods:
connect()- Connect to SQL ServergetData()- Execute SELECT querygetDataWithParams()- Secure parameterized querywriteData()- Execute INSERT/UPDATE/DELETEwriteDataWithParams()- Secure parameterized writebeginTransaction(),commit(),rollback()- TransactionsbulkInsert()- Batch insert rowsdisconnect()- Close connection
Result Object:
QueryResult {
columns: ['Id', 'Name', 'Age'],
rows: [{'Id': 1, 'Name': 'Alice', 'Age': 25}],
affectedRows: 0
}
Security #
Always use parameterized queries to prevent SQL injection:
// Good - Safe
await request.getDataWithParams(
'SELECT * FROM Users WHERE Name = @name',
[SqlParameter(name: 'name', value: userInput)],
);
// Bad - SQL Injection Risk!
await request.getData("SELECT * FROM Users WHERE Name = '$userInput'");
Troubleshooting #
Can't connect?
- Check SQL Server is running on port 1433
- Verify firewall allows connections
- Test:
telnet your-server 1433
Library not found?
- Run
./build_freetds.shin android/ or ios/ folder - Desktop: Install FreeTDS (
brew install freetdson macOS)
Build errors?
flutter clean
flutter pub get
flutter build apk # or ios
Author #
Farhan Sadik Galib - farhansadikgalib.com