2016-05-24 4 views
-2

C# код:'System.InvalidCastException' в SqlCommand

  string d; 
     d = "did" + mission.Text; 
     int p = 0; 

     var command = string.Format("SELECT {0} FROM [User] WHERE Username = @name", d); 
     using (SqlCommand cBd = new SqlCommand(command, c)) 
     { 
      cBd.Parameters.AddWithValue("@name", txtuser.Text); 
      c.Open(); 
      p = (int)cBd.ExecuteScalar(); 
      c.Close(); 
     } 
     p++; 
     SqlCommand cmd = new SqlCommand("UPDATE [User] SET @mission = @par WHERE Username = @name",c); 
     cmd.Parameters.AddWithValue("@mission", d); 
     cmd.Parameters.AddWithValue("@par",p); 
     cmd.Parameters.AddWithValue("@name", txtuser.Text); 
     c.Open(); 
     cmd.ExecuteNonQuery(); 
     c.Close(); 

Ошибка:

An exception of type 'System.InvalidCastException' occurred in App_Web_sazkdh0g.dll but was not handled in user code

Additional information: Specified cast is not valid.

+1

Вы должны укажите столбец, который вы t для извлечения вместо '@ g'. Имена столбцов не уязвимы для SQL Injection. –

+1

Какая строка бросает исключение? Похоже, вы пытаетесь отправить параметр, который не соответствует типу, который ожидает команда. – maniak1982

+0

p = (int) cBd.ExecuteScalar(); –

ответ

0

Правильный код:

  // In a using statement, acquire the SqlConnection as a resource. 
      using (SqlConnection con = new SqlConnection(connectionString)) 
      { 
       // 
       // Open the SqlConnection. 
       // 
       con.Open(); 
       // 
       // The following code uses an SqlCommand based on the SqlConnection. 
       // 
       string d; 
       d = "did" + mission.Text; 
       int p = 0; 

       var command = string.Format("SELECT {0} FROM [User] WHERE Username = @name", d); 
       using (SqlCommand cmd = new SqlCommand(command, con)) 
       { 
        cmd.Parameters.AddWithValue("@name", txtuser.Text); 
        p = (int)cmd.ExecuteScalar(); 
       } 

       command = string.Format("UPDATE [User] SET {0} = @par WHERE Username = @name", d); 
       using (SqlCommand cmd = new SqlCommand(command, con)) 
       { 
        cmd.Parameters.AddWithValue("@par", p); 
        cmd.Parameters.AddWithValue("@name", txtuser.Text); 
        cmd.ExecuteNonQuery(); 
       } 

      } 

Возможные sql injection в string.Format

+0

Я сделал это его работу, но это не обновление таблицы почему? –

+0

посмотреть вверх i upate код –

+0

Используйте 'Параметры' только для реальных параметров в вашем запросе, например, значения, стоящие после'>/