{"record":{"id":"5d3ede63386dbf5b","repo":"tursodatabase/turso","slug":"connection-must-be-set-before-executing-a-command","errorCode":null,"errorMessage":"Connection must be set before executing a command.","messagePattern":"Connection must be set before executing a command\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"bindings/dotnet/src/Turso.Data/TursoCommand.cs","lineNumber":277,"sourceCode":"        }\n\n        return sql;\n    }\n\n    private static bool ParsePragmaEnabled(string value)\n    {\n        value = value.Trim('\\'', '\"');\n        return long.TryParse(value, out var number)\n            ? number != 0\n            : value.Equals(\"ON\", StringComparison.OrdinalIgnoreCase)\n              || value.Equals(\"TRUE\", StringComparison.OrdinalIgnoreCase)\n              || value.Equals(\"YES\", StringComparison.OrdinalIgnoreCase);\n    }\n\n    private DbDataReader Execute(CommandBehavior behavior = CommandBehavior.Default)\n    {\n        if (_connection is null)\n            throw new InvalidOperationException(\"Connection must be set before executing a command.\");\n\n        if (_connection.IsRemote)\n            return ExecuteRemoteAsync(behavior, CancellationToken.None).GetAwaiter().GetResult();\n\n        IDisposable? syncOperation = _connection.EnterSyncOperation();\n        try\n        {\n            PrepareCore();\n\n            var statement = _statement ?? throw new InvalidOperationException(\"Command was not prepared.\");\n            _statement = null;\n            try\n            {\n                var reader = new TursoDataReader(this, statement, behavior, syncOperation);\n                syncOperation = null;\n                return reader;\n            }\n            catch","sourceCodeStart":259,"sourceCodeEnd":295,"githubUrl":"https://github.com/tursodatabase/turso/blob/c1e59287258d99b309e362a63f48822256e2f65f/bindings/dotnet/src/Turso.Data/TursoCommand.cs#L259-L295","documentation":"The synchronous Execute path requires a connection: it either delegates to the remote client or calls Prepare() against the native handle (TursoCommand.cs:268-271). A null _connection at entry throws InvalidOperationException before any SQL is touched.","triggerScenarios":"var cmd = new TursoCommand(\"SELECT 1\"); cmd.ExecuteReader(); — ExecuteReader/ExecuteNonQuery/ExecuteScalar on a command whose Connection was never assigned or was set to null.","commonSituations":"Forgetting conn.CreateCommand() and newing the command directly; a command created in one scope and reused after its connection was unbound; unit tests exercising commands without a live connection.","solutions":["Assign the connection before executing: cmd.Connection = conn; (after conn.Open()).","Create commands via the connection: using var cmd = conn.CreateCommand();","In shared helpers, null-check cmd.Connection and fail with your own clearer error message."],"exampleFix":"// before\nvar cmd = new TursoCommand(\"SELECT 1\");\nusing var reader = cmd.ExecuteReader(); // no Connection -> throws\n\n// after\nusing var conn = new TursoConnection(cs);\nconn.Open();\nusing var cmd = conn.CreateCommand();\ncmd.CommandText = \"SELECT 1\";\nusing var reader = cmd.ExecuteReader();","handlingStrategy":"validation","validationCode":"if (cmd.Connection is not TursoConnection)\n    throw new InvalidOperationException(\"Bind an open TursoConnection to the command before executing.\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use conn.CreateCommand() everywhere instead of new TursoCommand().","Open the connection before the first execute.","In generic code, check for a null Connection and surface a descriptive error."],"tags":["dotnet","ado-net","tursodb","connection","execute"],"backgroundTag":"connection-not-set","analyzedSha":"c1e59287258d99b309e362a63f48822256e2f65f","analyzedAt":"2026-08-20T07:02:18.389Z","contentChangedAt":"2026-08-20T07:02:18.389Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}