2011-01-10 2 views
0

Я пытаюсь вставить целое число в базу данных на C#, используя следующий код, но каждый раз, когда я запускаю компилятор, мне сообщают, что мое целое не является допустимым столбцом «Недопустимый столбец» Имя пользователя ID "Как вставить целое число в базу данных через командную строку

У кого-нибудь есть представление об этом? Благодарю.

Console.WriteLine("Please enter a new User Id"); 
     string line = Console.ReadLine(); 
     int UserID; 
     if (int.TryParse(line, out UserID)) 
     { 
      Console.WriteLine(UserID); 
      Console.ReadLine(); 
     } 



     //Prepare the command string 
     string insertString = @"INSERT INTO tb_User(ID,f_Name, l_Name) VALUES (UserID,'Ted','Turner')"; 

ответ

-1

Чтобы ответить на ваш вопрос, независимо от вашего подхода, попробуйте:

string insertString = @"INSERT INTO tb_User(ID,f_Name, l_Name) VALUES (" 
+ UserID + ",'Ted','Turner')"; 
+2

Давайте не будем поощрять код, который созрел для SQL Injection. –

+0

Я сказал «независимо от вашего подхода» geesh. Кажется, он просто тестирует консольное приложение, я сомневаюсь, что это корпоративное приложение, которое он пишет для общественного потребления, да, давайте защитим консольное приложение от SQL-инъекции. – kd7

+0

Спасибо за непредвзятый ответ, и я понимаю, что вы имеете в виду, независимо от подхода. Я просто прочитал, что это один из способов сделать это, но у него есть такая возможность для такого риска. Но для моего небольшого примера и отсутствия знаний о том, как заставить его работать, это именно то, что я искал. Еще раз спасибо. – jpavlov

0

это потому, что 'USERID' в вашем insertString:. ... "VALUES (Идентификатор_пользователь" ... недействителен

вам нужно передать значение для UserID, таких как: .. . "VALUES ('myUserIDGoesHere" ...

0

Ваша строка не динамически чтение переменных использовать что-то вроде этого:.

строка insertString = string.Format (@ "INSERT INTO tb_User (ID, f_Name, l_Name) VALUES ({0}, '{1}', '{2}') ", UserId," Ted ", " Turner ");

Есть лучшие способы в зависимости от того, какой доступ к данным вы используете, но это только для того, чтобы исправить строку.

+5

Конкатенация ввода пользователем очень плохая консультация. –

0

Проблема является первым аргументом в VALUES - это просто не определен. Если это значение будет введено пользователем, то вам нужно добавить параметр в команду и использовать этот параметр в SQL; например:

cmd.Parameters.AddWithValue("@id", UserID); 

затем использовать

VALUES(@id, ... 

в TSQL.

Кроме того, обычно, вы можете захотеть, чтобы система сгенерировала уникальный идентификатор. Самый простой уровень, который может иметь IDENTITY (автоматическая последовательность).

0

Использование параметризованных запросов:

using (var connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    using (var insertCommand = new SqlCommand(
     @"INSERT INTO tb_User (ID, f_Name, l_Name) 
      VALUES (@ID, 'Ted', 'Turner')", connection)) 
    { 
     insertCommand.Parameters.AddWithValue("@ID", userID); 
     insertCommand.ExecuteNonQuery(); 
    } 
} 
3

Первых вещи первым, я хотел бы получить в привычку использовать параметризованные запросы, если вы не планируете использовать хранимые процедуры. В вашем примере, я бы:

using (var command = new SqlCommand("INSERT INTO tb_User(ID, f_Name, l_Name) VALUES (@id, @forename, @surname)", conn)) 
{ 
    command.Parameters.AddWithValue("id", id); 
    command.Parameters.AddWithValue("forename", forename); 
    command.Parameters.AddWithValue("surname", surname); 

    command.ExecuteNonQuery(); 
} 

Где id, forename, surname являются соответствующие переменные. Заметьте, что я также использую блоки using, это гарантирует, что мои объекты будут очищены после его завершения.

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