#.net #database #sqlite #mono
#.net #База данных #sqlite #mono
Вопрос:
Мне нужно использовать Sqlite, но есть проблема с моим синтаксисом (ну, это то, о чем мне говорит Исключение …), Вот мой код:
using System;
using System.Data;
using Mono.Data.Sqlite;
class MainClass
{
public static void Main (string[] args)
{
string connectionString = "URI=file:SqliteTest.db,version=3";
SqliteConnection conn = new SqliteConnection(connectionString);
conn.Open();
SqliteCommand dbcommand = new SqliteCommand(conn);
string sql_command = "CREATE TABLE transaction ("
"id INTEGER PRIMARY KEY,"
"datetemps TEXT NOT NULL,"
"description TEXT NOT NULL);";
Console.WriteLine(sql_command);
dbcommand.CommandText = sql_command;
dbcommand.ExecuteNonQuery();
dbcommand.Dispose();
conn.Close();
}
}
Вот исключение, которое я получаю:
Unhandled Exception: Mono.Data.Sqlite.SqliteException: SQLite error
near "transaction": syntax error
Я привык использовать MySQL, и я не в первый раз работаю с базами данных, но я впервые столкнулся с такой проблемой, я просто не могу понять, в чем проблема, почему существует «проблема синтаксиса».
Спасибо за ваши советы!
Ответ №1:
Транзакция — это зарезервированное ключевое слово в SQLite. Чтобы использовать его в качестве имени объекта, заключите его в одинарные или двойные кавычки, квадратные скобки или обратные знаки:
CREATE TABLE 'transaction' ...
CREATE TABLE "transaction" ...
CREATE TABLE [transaction] ...
CREATE TABLE `transaction` ...
Обратите внимание, что скобки и обратные знаки не являются стандартным SQL, поэтому обычно рекомендуется использовать кавычки.
Для получения полного списка других зарезервированных слов: http://www.sqlite.org/lang_keywords.html
Комментарии:
1. Спасибо, я забыл, что транзакция была ключевым словом, и благодарю вас за ссылку на список ключевых слов 🙂