2013-09-11 2 views
0

Я пытаюсь использовать метод insert в своем studentHelperClass, я пытаюсь активировать его при нажатии кнопки на моей форме, я не знаю, как заставить его работать с текстовое поле, поэтому, если кто-то может помочь с этим, это будет здорово.Пытается использовать метод INSERT, но не работает

Это мой метод:

public static void insertStudent() 
     { 
      MySqlConnection conn = connection(); 
      conn.Open(); 
      MySqlCommand cmd = new MySqlCommand(); 
      cmd.Connection = conn; 
      string myInsertSQL = "INSERT INTO person(personID) "; 
      cmd.Prepare(); 
      myInsertSQL += "VALUES (@personID)"; 
      cmd.Parameters.AddWithValue("@personID", "123345667788"); 
      prevID(conn, cmd); 
     } 

и это моя форма:

private void btnInsert_Click(object sender, EventArgs e) 
       { 
        studentHelperClass.insertStudent(); 
       } 

EDIT:

private static void prevID(MySqlConnection conn, MySqlCommand cmd) 
     { 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      long studentNumber = (long)cmd.LastInsertedId; 
      Console.Write("previous id {0} ", studentNumber); 
      Console.ReadLine(); 
      conn.Close(); 
     } 
+0

Таким образом, ваша форма вызывает метод удаления ученика, но ваш метод вставляет его. –

+0

oops извините, это мое плохое Я сделал опечатку при публикации кода. Отредактировано – user2767155

+0

Что вы подразумеваете под «заставить работать с текстовым полем»? У вас есть идентификатор студента в текстовом поле, которое вы хотите использовать? Или вы хотите вызвать метод в каком-то событии текстового поля? –

ответ

1

Принимая во внимание, что ваш prevId (conn, cmd) вызывает ExecuteNonQuery, вам все равно нужно установить cmd.CommandText равным вашему myInsertSql (как указывали другие ответы).

Чтобы ответить на ваш вопрос, хотя,

private void btnInsert_Click(object sender, EventArgs e) 
{ 
    studentHelperClass.insertStudent(studentIdTextBox.Text); 
} 

public static void insertStudent(string studentId) 
{ 
    MySqlConnection conn = connection(); 
    conn.Open(); 
    MySqlCommand cmd = new MySqlCommand(); 
    cmd.Connection = conn; 
    string myInsertSQL = "INSERT INTO person(personID) "; 
    cmd.Prepare(); 
    myInsertSQL += "VALUES (?personID)"; 
    cmd.CommandText = myInsertSQL;   
    cmd.Parameters.AddWithValue("?personID", studentId); 
    prevID(conn, cmd); 
} 

Ive также предполагали, что ваша studentId строка. Если в базе данных это как bigint, вам нужно будет сделать правильный вызов long.TryParse().

+0

hmmm, все еще нет ошибок с кодом, но все равно не вставляет. ..:/ – user2767155

+0

Извините, ошибся с заказом cmd.CommandText = myInsertSQL –

+0

OK !!!!!!!!! СПАСИБО. Это решение сработало. – user2767155

1

Вам нужно установить cmd.CommandText в myInsertSQL

, а также необходимо вызвать cmd.ExecuteNonQuery()

string sql = "INSERT INTO person (personID) VALUES (@personID)"; 
using (MySqlConnection conn = connection()) 
using (MySqlCommand cmd = new SqlCommand(sql, conn)) 
{ 
    cmd.Parameters.AddWithValue("@personID", personID); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
} 
+0

'prevID (conn, cmd);' вызывает метод ниже, который имеет 'cmd.ExecuteNonQuery(); ' – user2767155

+0

Но вы не используете в параметре prevID sqlString, чтобы этот метод не знал, какую команду выполнить – Kubik

+0

Хорошо, используя приведенный выше код, я не получаю никаких ошибок, но он не вставляет новый идентификатор' 123345667788' – user2767155

0

Вы должны присвоить строку переменной, 'myInsertSQL' в cmd.CommandText, а затем вызвать, cmd.ExecuteNonQuery();

Т.е.

cmd.CommandText = myInsertSQL; 
cmd.ExecuteNonQuery(); 
cmd.Dispose(); 

Всегда вызывайте «Dispose(); когда закончите, так что .net Garbage Collection может очищать и управлять ресурсами.

0

Вы не используете строку myInsertSQL вообще, вы просто установите ее. Вы должны установить строку как текст команды cmd.CommandText = myInsertSQL, и вы должны вызвать метод cmd.ExecuteNonQuery().

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