2013-12-07 3 views
0

Я пытаюсь вставить информацию о пользователе в таблицу, названную пользователем в моей базе данных, однако я думаю, что что-то не так с тем, как я написал запрос, ответственный за это.Как вставить значения в базу данных (доступ Microsoft)?

Вот что я сделал до сих пор:

public static void addUser(string n, string s) 
{ 
    OleDbConnection myConnection = GetConnection(); 
    string myQuery = "INSERT INTO user(Name, Surname) VALUES ('" + n + " , " + s + "')"; 
    OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 

    try 
    { 
     myConnection.Open(); 
     myCommand.ExecuteNonQuery(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Exception in DBHandler", ex); 
    } 
    finally 
    { 
     myConnection.Close(); 
    } 
} 
+0

Вы получаете какое-либо исключение или сообщение об ошибке? –

+0

Я так думаю, потому что, когда я отлаживаю его, он пытается поймать исключение и ничего не добавляется в базу данных. – user3052409

+0

Отправьте исключение в свой вопрос. Это поможет нам отладить. –

ответ

0

Проблема: вы злоупотребляете одиночные кавычки.

Решение: вам необходимо заключить VARCHAR типы в одинарные кавычки правильно

Попробуйте:

string myQuery = "INSERT INTO [user] ([Name],Surname) VALUES ('" + n + "' , '" + s + "')"; 

Я предлагаю вам использовать Parameterised sql queries избежать Sql Injection attacks

Попробуйте: с Параметрированные запросы

string myQuery = "INSERT INTO [user]([Name], Surname) VALUES (@name,@surname)"; 
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 
myCommand.Parameters.AddWithValue("@name",n); 
myCommand.Parameters.AddWithValue("@surname",s); 
+0

Спасибо, сработало! – user3052409

+0

@ user3052409: добро пожаловать, я рад помочь вам. –

0

Вы пропустили пару апострофа.

, как вы его получили, вместо передачи двух параметров (т.е. 'one' и 'two'), вы передаете один параметр (т.е. 'one , two').

Попробуйте это:

string myQuery 
    = "INSERT INTO user(Name, Surname) VALUES ('" + n + "' , '" + s + "')"; 
2

Ну, вы не сказали нам, что получаете какую-либо ошибку или нет, но с использованием parameterized queries всегда лучший вариант. Этот kinf строковых конкатенаций открыт для атак .

Например,

string myQuery = "INSERT INTO [user] ([Name], Surname) VALUES (@n, @s)"; 
OleDbCommand myCommand = new OleDbCommand(myQuery, myConnection); 
myCommand.Parameters.AddWithValue("@n", n); 
myCommand.Parameters.AddWithValue("@s", s); 

Также user и Name являются reserved keywords на MS Access. Вы должны использовать их с квадратными скобками, такими как [user] и [Name].

В качестве общей рекомендации не используйте зарезервированные ключевые слова для своих идентификаторов и имен объектов в своей базе данных.

0

Дело в том, что «пользователь» является ключевым словом для MS Access. Вы должны положить его в угловые скобки: [user].

HTH Thomas

Смежные вопросы