2017-01-30 14 views
-1

Я проверил свои значения, но он все еще говорит, что у меня недостаточно. У меня есть одно значение, которое не входит в инструкцию insert, но это значение идентификатора, поэтому я думаю, что мне не нужно указывать это в моем коде?!?!В инструкции INSERT больше столбцов, чем значений, указанных в предложении VALUES.

В любом случае, вот код и спасибо, что помогли мне!

string Fname = tbFIRSTNAME.Text.Trim(); 
       string Lname = tbLASTNAME.Text.Trim(); 
       string Sname = tbStreetName.Text.Trim(); 
       string SSN = tbSSN.Text.Trim(); 
       string CrimeID = cmbCRIMEID.Text.ToString(); 
       string DangerLVL = cmbDANGERLEVEL.Text.ToString(); 
       string CrimeDesc = rtbCrimeInfo.Text.Trim(); 

       string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + '"' + Lname + '"' + Sname + '"' + SSN + '"' + DangerLVL + '"' + CrimeID + '"' + CrimeDesc + "')"; 

       clsDB.InsUpDel(str); 
+3

Вы не отделяя значения запятой ... Все они вставляются в одно значение –

+2

Где запятые ',' между значения? –

+4

Возможно, вы захотите рассмотреть возможность добавления параметров в ваш SQL-запрос, чтобы предотвратить SQL Injection –

ответ

1

Проблема заключается в том, что вы не установили запятую между вашими значениями (Таким образом, вы на самом деле вводом одно значения не 7):

string str = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) values ('" + Fname + "','" + Lname + "','" + Sname + "'," + SSN + "," + DangerLVL + "," + CrimeID + ",'" + CrimeDesc + "')"; 

Очевидно, некоторые из типов VARCHAR не прилагаемых между '' слишком , сейчас это не так, но после добавления запятых вы можете получить другие ошибки из-за несоответствий типов

1

Ваша основная ошибка, как утверждают другие, заключается в том, что вы не разделяете все значения запятыми. Кроме того, у вас большой недостаток безопасности. И это должно использовать ваши значения непосредственно из ваших текстовых полей. Это самый небезопасный и наиболее распространенный недостаток безопасности при разработке программного обеспечения и потенциально может привести к атакам SQL Injection для вашего приложения. Чтобы этого избежать, вы должны использовать параметризованный запрос. Это возобновился код, но вы должны так что-то вроде этого:

using(MySqlConnection conn = new MySqlConnection("YourConnectionString")) 
{ 
     conn.Open(); 
     MySqlCommand command = conn.CreateCommand(); 
     command.CommandText = "insert into Crooks (FirstName, LastName, StreetName, SSN, CrimeID, DangerLevel, CrimeDescription) VALUES (@FirstName, @LastName, @StreetName, @SSN, @CrimeID, @DangerLevel, @CrimeDescription)"; 

     command.Parameters.AddWithValue("@FirstName", tbLASTNAME.Text.Trim()); 
     command.Parameters.AddWithValue("@LastName", tbStreetName.Text.Trim()); 
     /* 
     ... 
     AND SO ON WITH OTHER PARAMETERS 
     ... 
     */  
     command.ExecuteNonQuery(); 
     conn.Close(); 
} 
+0

Спасибо, я буду использовать это. –