2013-06-26 7 views
2

Я пытаюсь вставить значение текстового поля в базу данных. Но мне была предложена эта ошибка «Неправильный синтаксис рядом с ключевым словом« table »« Ошибка «cmd.ExecuteNonQuery();» Что не так с моими кодами?Невозможно вставить в таблицу моей базы данных

Ниже мой код:

string query; 
string str = "Data Source=blank blank blank;Initial Catalog=test;User ID=hello;Password=password"; 
SqlConnection con = new SqlConnection(str); 
con.Open(); 
query = "INSERT INTO table dbo.url_map Values ('" + tbLongURL.Text + "')"; 
SqlCommand cmd = new SqlCommand(query, con); 
cmd.ExecuteNonQuery(); 
con.Close(); 
+1

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+4

Вы должны использовать параметры для передачи значений в свой SqlCommand http://csharp-station.com/Tutorial/AdoDotNet/Lesson06 – Fabio

ответ

6

правильный синтаксис

query = "INSERT INTO dbo.url_map Values ('" + tbLongURL.Text + "')"; 

В основном вы добавили слово «таблица» в запросе, который не является SQL синтаксис. Это

INSERT INTO tablename

+0

Его работа. Спасибо – qU3st

3

Вы не спасаясь текст, который может не только нарушить ваш SQL запрос, но делает вас уязвимым для инъекции SQL, если вход не продезинфицировать. Что вы должны сделать:

string query; 
string str = "Data Source=blank blank blank;Initial Catalog=test;User ID=hello;Password=password"; 
SqlConnection con = new SqlConnection(str); 
con.Open(); 
query = "INSERT INTO dbo.url_map Values (@Url)"; 
SqlCommand cmd = new SqlCommand(query, con); 
cmd.Parameters.AddWithValue("@Url", tbLongURL.Text); 
cmd.ExecuteNonQuery(); 
con.Close(); 
+0

Ошибка теперь не с таблицей, а с url_map. Что не так с моим запросом? – qU3st

+1

Сначала я не понял, но 'INSERT INTO table dbo.url_map' должен быть' INSERT INTO dbo.url_map' –

2

В dbo.url_map таблице есть только столбец? если эта таблица есть еще столбцы, вы можете попробовать этот запрос

INSERT INTO dbo.url_map(login) VALUES('" + tbLogonURL.Text + "')"; 

Потому что, когда вы не указать, какой столбец даты вы вставляете, ваша БД не будет пытаться взять дату для все столбца таблицы, если у вас есть столбец идентификатора, logon и пройти, он не сможет принять дату для id и передать, и это может вызвать ошибку для вашей вставки.