2017-01-05 5 views
1

Я пытаюсь написать запрос к моей базе данных. Когда я изначально написал это, я не использовал параметры, теперь я пытаюсь это сделать, но теперь я получаю Mysql Error.C# Mysql Parameters Issue

Количество столбцов не совпадает со значением на row1

Что в моей колонке 1 У меня есть автоматический Увеличивается число помечены как «ID», который я не считаю, что я должен добавить на запрос из-за автоматического приращения ..

Это вновь написанный код:

  MySqlConnection conn = new MySqlConnection(dbConnection); 
      string Query = "INSERT INTO tasklist.tasks (TaskName, AssignedTo, StartDate, EndDate, Description, DirPath, Completed) VALUES (?TaskName),(?AssignedTo),(?StartDate),(?EndDate),(?Description),(?DirPath),(?Completed);"; 

      MySqlCommand insertCommand = new MySqlCommand(Query, conn); 

      conn.Open(); 

      insertCommand.Parameters.AddWithValue("?TaskName", txtTaskName.Text); 
      insertCommand.Parameters.AddWithValue("?AssignedTo", txtAssignTo.Text); 
      insertCommand.Parameters.AddWithValue("?StartDate", txtdateStart.Value.ToString("yyyy-M-d")); 
      insertCommand.Parameters.AddWithValue("?EndDate", txtDateEnd.Value.ToString("yyyy-M-d")); 
      insertCommand.Parameters.AddWithValue("?Description", txtTaskDescription.Text); 
      insertCommand.Parameters.AddWithValue("?DirPath", txtDirPath.Text); 
      insertCommand.Parameters.AddWithValue("?Completed",("0")); 

      insertCommand.ExecuteNonQuery(); 

      conn.Close(); 

Запомните предыдущий путь без работы параметров ... однако с параметрами не работает. Что именно я делаю неправильно здесь? Любая помощь будет принята с благодарностью.

+0

[Можем ли мы отказаться от использования AddWithValue() уже?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-use-addwithvalue-уже /) – Plutonix

+0

При использовании .add VS заявляет, что '.add' устарел и использовать' .AddWithValue' – Mokey

+0

Посмотрите более внимательно - это '.Add (объект, объект) ', которая устарела. 'Parameters.Add (" @ p1 ", MySqlDbType.Foo) .Value = varBar;' Указание типа данных предотвращает любые недоразумения или нежелательные преобразования типов – Plutonix

ответ

3

Используйте только одна пара скобок вокруг всех параметров

INSERT INTO tasklist.tasks (TaskName, AssignedTo, StartDate, EndDate, Description, DirPath, Completed) 
VALUES (?TaskName, ?AssignedTo, ?StartDate, ?EndDate, ?Description, ?DirPath, ?Completed) 
+0

@Mokey, обратите внимание, что _all_ значения за строку, которую вы 'insert insert находятся в '()' круглых скобках, а не _each_. Если вы вставляете 2 строки, второй набор значений также будет содержаться вместе в другом наборе. –

+0

Да, я только что понял это, прежде чем я вернулся, чтобы проверить. Это то, что я сделал. 'string Query =" INSERT INTO tasklist.tasks (TaskName, AssignedTo, StartDate, EndDate, Description, DirPath, Completed) VALUES ((? TaskName), (? AssignedTo), (? StartDate), (? EndDate), (?), (? DirPath), (? Completed)); ";', который исправил его – Mokey

+0

Хорошо - если вы находитесь в резервных круглых скобках ... –