2013-03-06 3 views
1

Я смотрел веб-учебник, и преподаватель говорил на языке, который я не понимаю, и видео не показывало полную длину. Может ли кто-нибудь посоветовать мне, как должна выглядеть линия ...Невозможно неявно преобразовать тип 'string' в 'System.Data.CommandType'

private void Insertbtn_Click(object sender, EventArgs e) 
{ 
    OleDbCommand cmd = new OleDbCommand(); // this is good 
    cmd.CommandType = CommandType.Text; // this is good 
    cmd.CommandType = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
    StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; *// Need help here pls* 
    cmd.Connection=myCon; 
    myCon.Open(); 
    cmd.ExecuteNonQuery(); 
    myCon.Close(); 
} 

Я развиваюсь в VS 2010 C#. Использование доступа.

ответ

6

Вы должны всегда использовать parameterized queries. Ваш код открыт для SQL Injection attacs.

В запросе, вы должны использовать CommandText свойство, а не CommandType

cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values(@StudIDTxt, @StudNameTxt, @StudCNCITxt, @StudDOBTxt)"; 

cmd.Parameters.AddWithValue("@StudIDTxt", StudIDTxt.Text); 
cmd.Parameters.AddWithValue("@StudNameTxt", StudNameTxt.Text); 
cmd.Parameters.AddWithValue("@StudCNCITxt", StudCNCITxt.Text); 
cmd.Parameters.AddWithValue("@StudDOBTxtl", StudDOBTxt.Text); 
+1

Вместо того, чтобы указывать, что не так, покажите ему правильную версию. –

+0

Спасибо Soner и Wiktor – bucketblast

+2

Теперь это лучший ответ .. + 1 для вас @Soner Gönül – Garry

3

Ваш

cmd.CommandType = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
    StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; 

должен быть

cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
    StudCNCITxt.Text + "','" + StudDOBTxt.Text +"')"; 

Вы сделали опечатку.

Также отсутствовала одинарная кавычка - (StudDOBTxt.Text +")") должно было быть StudDOBTxt.Text +"')" - это вызовет синтаксическую ошибку на стороне SQL-сервера.

Что касается параметризованной формы вашего запроса (форма, безопасная от SQL-инъекции), она должна будет использовать вопросительные знаки вместо именованных параметров (так оно работает в ODBC, когда тип команды - это текст), это было бы что-то вроде этого:

cmd.CommandText = @"INSERT INTO Students(StudentID, StudentName, StudentCNCI, StudentDOB) 
         Values(?,?,?,?)"; 
    cmd.Parameters.Add(new OleDbParameter("p1", StudIDTxt.Text)); 
    cmd.Parameters.Add(new OleDbParameter("p2", StudNameTxt.Text)); 
    cmd.Parameters.Add(new OleDbParameter("p3", StudCNCITxt.Text)); 
    cmd.Parameters.Add(new OleDbParameter("p4", StudDOBTxt.Text)); 
+0

О да, я видел его сейчас. Большое вам спасибо, Иван – bucketblast

+0

@bucketblast Добро пожаловать :) Как отмечалось другими, вам следует рассмотреть возможность использования параметризованных запросов, они предотвращают инъекции SQL (http://msdn.microsoft.com/en-us/library/system.data .odbc.odbccommand.parameters.aspx). –

+0

Именно поэтому я получаю сообщение об ошибке «Синтаксическая ошибка в строке в выражении запроса» '05/51/2013). – bucketblast

2
private void Insertbtn_Click(object sender, EventArgs e) 
{ 
    OleDbCommand cmd = new OleDbCommand(); // this is good 
    cmd.CommandType = CommandType.Text; // this is good 
    cmd.CommandText = "INSERT INTO Students(StudentID, StudentName, StudentCNCI, 
    StudentDOB) Values('" + StudIDTxt.Text + "','" + StudNameTxt.Text + "','" + 
    StudCNCITxt.Text + "','" + StudDOBTxt.Text +")"; *// Need help here pls* 
    cmd.Connection=myCon; 
    myCon.Open(); 
    cmd.ExecuteNonQuery(); 
    myCon.Close(); 
    } 

это должно быть Команда Текст не Тип команды

+0

Your Welcome @bucketblast – Garry

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