tursodatabase/turso · error · InvalidOperationException
{propertyName} must be set.
Error message
{propertyName} must be set. What it means
During BindParameters, every parameter in the collection must carry a non-empty ParameterName; one without a name throws InvalidOperationException because the provider matches names against the SQL's parameter tokens (FindParameterIndex) to find each bind index. Unnamed/positional parameters are not supported by this binding path.
Source
Thrown at bindings/dotnet/src/Turso.Data.Sqlite/SqliteCommand.cs:654
return statement;
}
catch
{
statement.Dispose();
throw;
}
}
private void BindParameters(TursoStatementHandle statement)
{
var parameterCount = TursoBindings.GetParameterCount(statement);
var boundParameters = new bool[parameterCount + 1];
for (var i = 0; i < Parameters.Count; i++)
{
var parameter = Parameters[i];
if (string.IsNullOrEmpty(parameter.ParameterName))
throw new InvalidOperationException(Properties.Resources.RequiresSet(nameof(parameter.ParameterName)));
if (!parameter.HasValue)
throw new InvalidOperationException(Properties.Resources.RequiresSet(nameof(parameter.Value)));
var parameterIndex = FindParameterIndex(statement, parameter.ParameterName, parameterCount);
if (parameterIndex == 0)
continue;
TursoBindings.BindParameter(statement, parameterIndex, parameter.ToTursoValue());
boundParameters[parameterIndex] = true;
}
for (var i = 1; i <= parameterCount; i++)
{
if (!boundParameters[i])
{
var parameterName = TursoBindings.GetParameterName(statement, i);
throw new InvalidOperationException(
parameterName is nullView on GitHub (pinned to 6c72522679)
Solutions
- Set ParameterName on every parameter (matching the token spelling used in the SQL, e.g. $id).
- Prefer cmd.Parameters.AddWithValue("$name", value), which names and binds in one step.
- Audit helper methods that call CreateParameter() to require a name argument.
Example fix
// before
var p = cmd.CreateParameter();
p.Value = 42;
cmd.Parameters.Add(p); // no ParameterName -> throws
// after
cmd.Parameters.AddWithValue("$id", 42); Defensive patterns
Strategy: validation
Validate before calling
foreach (DbParameter p in cmd.Parameters)
if (string.IsNullOrEmpty(p.ParameterName))
throw new InvalidOperationException("Every parameter needs a ParameterName."); Prevention
- Prefer AddWithValue over CreateParameter.
- Name parameters exactly as they appear in the SQL text.
- Validate parameter collections in debug builds.
When it happens
Trigger: Creating a parameter via cmd.CreateParameter(), setting only Value, adding it, and executing; parameter objects copied with cleared names; ordinal-style code assuming positional binding works.
Common situations: Refactors that rename SQL tokens while stale parameter objects linger; shared parameter factories that skip naming; code ported from providers that permit unnamed parameters.
Related errors
- Parameter must be of type TursoParameter
- Parameter {parameter.ParameterName} was not found in the SQL
- Parameter at position {parameterIndex} was not found in the
- Missing value for parameter at position {i}.
- Missing value for parameter {parameterName}.
AI-assisted analysis of tursodatabase/turso@6c72522679 (2026-08-20).
Data as JSON: /api/errors/a2892b1477f2cc1a.
Report an issue: GitHub.