У меня есть таблица, определённая следующим образом:
Код: Выделить всё
CREATE TABLE Example (
id INTEGER NOT NULL,
"some-field" TEXT
);
Код: Выделить всё
public void Insert(int id, string somefield)
{
using(var db = new SQLiteConnection("..."))
{
string sql = "INSERT INTO Example (Id, [some-field]) VALUES (@id, @somefield)";
db.Execute(sql, new { id, somefield });
}
}
Моя программа на самом деле динамически создает оператор вставки sql, но ради этого вопроса давайте предположим, что я хотите передать параметр, соответствующий имени столбца:
Код: Выделить всё
INSERT INTO Example (id, [some-field]) VALUES (
@id, -- this is fine
[@some-field] -- SQL logic error: no such column @some-field
@[some-field] -- SQL logic error: unrecognized token: "@"
@"some-field" -- same error as above
"@some-field" -- works, but inserts the literal value, not the passed in parameter
);
Код: Выделить всё
var parameters = new Dictionary();
parameters.Add("id", 42);
parameters.Add("some-field", "hello");
parameters.Add("@some-field", "hello");
parameters.Add("@\"some-field\"", "hello");
...
db.Execute(sql, parameters);
...
как я уже сказал, имена столбцов вычисляются динамически, и их нужно использовать «как есть».
Подробнее здесь: https://stackoverflow.com/questions/793 ... n-its-name
Мобильная версия