Member 14101525 Ответов: 3

Ошибка, показанная при выполнении my ASP.NET применение


Я создал простое приложение insert delete update с помощью asp.net

showwing ошибка как

Incorrect syntax near the keyword 'table'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'table


Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;

namespace update
{
    public partial class delete : System.Web.UI.Page
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\rmoorthi\source\repos\update\App_Data\Database1.mdf;Integrated Security=True");
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            con.Open();
            SqlCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "insert into table values('"+TextBox1.Text+"','"+TextBox2.Text+"')";
            cmd.ExecuteNonQuery();

            con.Close();
            Response.Redirect("delete.aspx");
        }
    }
}

3 Ответов

Рейтинг:
2

CHill60

Проблема заключается в линии

cmd.CommandText = "insert into table values('"+TextBox1.Text+"','"+TextBox2.Text+"')";
Если ваша таблица действительно вызывается table затем вам нужно использовать квадратные скобки вокруг зарезервированного слова:
cmd.CommandText = "insert into [table] values('"+TextBox1.Text+"','"+TextBox2.Text+"')";
Это плохая практика-использовать зарезервированные слова для имен таблиц, столбцов или представлений, но если вы настаиваете на этом, вы можете сделать это сами. должен окружите объект квадратными скобками.

Также не рекомендуется использовать конкатенацию строк для генерации операторов SQL - см.
SQL-инъекция - OWASP[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Рейтинг:
2

Patrice T

cmd.CommandText = "insert into table values('"+TextBox1.Text+"','"+TextBox2.Text+"')";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
1

Maciej Los

Правильность INSERT заявление есть:

INSERT INTO name_of_table (<<list_of_fields>>) VALUES (<<list_of_values>>)


Для получения более подробной информации, пожалуйста, смотрите: Вставка (Transact-SQL) - SQL Server | Microsoft Docs[^]