{"record":{"id":"3b395098b1f89be3","repo":"litedb-org/LiteDB","slug":"commandreader","errorCode":null,"errorMessage":"commandReader","messagePattern":"commandReader","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"LiteDB/Client/Database/LiteDatabase.cs","lineNumber":247,"sourceCode":"        /// </summary>\n        public bool RenameCollection(string oldName, string newName)\n        {\n            if (oldName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(oldName));\n            if (newName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(newName));\n\n            return _engine.RenameCollection(oldName, newName);\n        }\n\n        #endregion\n\n        #region Execute SQL\n\n        /// <summary>\n        /// Execute SQL commands and return as data reader.\n        /// </summary>\n        public IBsonDataReader Execute(TextReader commandReader, BsonDocument parameters = null)\n        {\n            if (commandReader == null) throw new ArgumentNullException(nameof(commandReader));\n\n            var tokenizer = new Tokenizer(commandReader);\n            var sql = new SqlParser(_engine, tokenizer, parameters);\n            var reader = sql.Execute();\n\n            return reader;\n        }\n\n        /// <summary>\n        /// Execute SQL commands and return as data reader\n        /// </summary>\n        public IBsonDataReader Execute(string command, BsonDocument parameters = null)\n        {\n            if (command == null) throw new ArgumentNullException(nameof(command));\n\n            var tokenizer = new Tokenizer(command);\n            var sql = new SqlParser(_engine, tokenizer, parameters);\n            var reader = sql.Execute();","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/litedb-org/LiteDB/blob/f906a5f850678719e39a39a006cb66dcae563cfa/LiteDB/Client/Database/LiteDatabase.cs#L229-L265","documentation":"ArgumentNullException thrown by LiteDatabase.Execute(TextReader commandReader, BsonDocument parameters) when commandReader is null. The overload builds a Tokenizer over the reader and then a SqlParser, so a null reader cannot be tokenized and is rejected up front.","triggerScenarios":"Calling db.Execute((TextReader)null); a stream/file that failed to open being passed as null; a multi-statement execution path where the reader was not constructed.","commonSituations":"File-open failure returning null instead of throwing; helper that builds a reader from a possibly-null stream; confusing the TextReader overload with the string overload and passing null.","solutions":["Pass a valid TextReader, e.g. db.Execute(new StringReader(sql)) or db.Execute(new StreamReader(file)).","If you have a plain string, use the string overload db.Execute(sql).","Null-check the reader source (file/stream) and fail with a clear message before calling Execute."],"exampleFix":"// before\ndb.Execute((TextReader)null);\n\n// after\ndb.Execute(new StringReader(\"SELECT * FROM customers\"));\n// or for a string\ndb.Execute(\"SELECT * FROM customers\");","handlingStrategy":"validation","validationCode":"if (commandReader == null) throw new ArgumentNullException(nameof(commandReader));\nvar reader = db.Execute(commandReader);","typeGuard":"static bool IsUsableReader(TextReader r) => r != null;","tryCatchPattern":null,"preventionTips":["Null-check the reader (and its underlying stream/file) before calling Execute.","Use the string overload db.Execute(sql) for plain SQL strings.","Make file/stream openers throw descriptive errors instead of returning null."],"tags":["execute","argumentnull","sql","textreader"],"backgroundTag":null,"analyzedSha":"f906a5f850678719e39a39a006cb66dcae563cfa","analyzedAt":"2026-08-13T21:56:30.148Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}