Flutter plugin for Microsoft SQL Server. Works on Android, iOS, Windows, macOS, Linux, and Web.
dependencies:
mssql_io: ^0.0.6FreeTDS is automatically downloaded and built during package installation for Android and iOS. The plugin will build without FreeTDS (stub implementation) if FreeTDS cannot be built, but you need FreeTDS for actual database connections.
FreeTDS builds automatically when you run flutter build or flutter pub get. First build may take 15-20 minutes.
Requirements:
- Android NDK (set
ANDROID_NDK_HOMEor install via Android Studio)
Manual build (optional):
cd android
chmod +x build_freetds.sh
./build_freetds.shFreeTDS builds automatically when you run pod install. First build may take 10-15 minutes.
Requirements:
- macOS with Xcode
- CMake (
brew install cmake)
Setup:
cd ios
pod install
cd ..
flutter clean
flutter pub get
flutter runbrew install freetds # macOS
sudo apt-get install freetds-dev # Linux
vcpkg install freetds:x64-windows # WindowsRequires backend API proxy. See Web Platform section.
import 'package:mssql_io/mssql_io.dart';
final request = MssqlConnection.getInstance();
// Connect
await request.connect(
host: '192.168.1.100',
databaseName: 'MyDB',
username: 'sa',
password: 'Password123',
);
// Query
final result = await request.getData('SELECT * FROM Users');
// Parameterized query (prevents SQL injection)
final users = await request.getDataWithParams(
'SELECT * FROM Users WHERE Age > @age',
[SqlParameter(name: 'age', value: 18)],
);
// Insert with parameters
await request.writeDataWithParams(
'INSERT INTO Users (Name, Email) VALUES (@name, @email)',
[SqlParameter(name: 'name', value: 'Alice'),
SqlParameter(name: 'email', value: 'alice@example.com')],
);
// Transaction
await request.beginTransaction();
try {
await request.writeData('INSERT INTO Orders VALUES (1, 99.99)');
await request.commit();
} catch (e) {
await request.rollback();
}
await request.disconnect();connect()/disconnect()- ConnectiongetData()/getDataWithParams()- QuerieswriteData()/writeDataWithParams()- Insert/Update/DeletebeginTransaction()/commit()/rollback()- TransactionsbulkInsert()- Batch operations
Always use parameterized queries:
// Safe
await request.getDataWithParams('SELECT * FROM Users WHERE Name = @name',
[SqlParameter(name: 'name', value: userInput)]);
// Unsafe!
await request.getData("SELECT * FROM Users WHERE Name = '$userInput'");Can't connect?
- Check SQL Server is running on port 1433
- Test:
telnet your-server 1433
Library not found?
- Mobile: Run
./build_freetds.shin android/ or ios/ - Desktop: Install FreeTDS