Параметры, предоставленные для объекта «AdminAssistant», который не является функцией. Если параметры предназначены в качестве табличной подсказки, необходимо ключевое слово WITH. ' - PullRequest
0 голосов
/ 18 мая 2019

При вставке значений в базу данных я получаю сообщение об ошибке, которое указано в теме. Не знаю, что мне не хватает.

        string ImagePath = "";

        string str = "insert into AdminAssistant() values('"+TextBox7.Text+ "','" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox5.Text + "','" + TextBox6.Text + "','" + DropDownList2.Text + "','" + TextBox4.Text + "','" + DropDownList1.Text+ "','" + TextBox9.Text + "','"+ImagePath+"','"+DateTime.Now+"','Active')";
        SqlCommand cmd = new SqlCommand(str,con);
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();

        Label1.Text = "Admin Created Successfully.....!!!";

Ниже приведен запрос

   Create Table AdminAssistant
  (
 A_ID int identity(1,1) not null primary key,
Aname varchar(20),
Aphone varchar(16),
Amail varchar(20),
A_Address varchar(150),
A_City varchar(20),
A_Gender varchar(10)NOT NULL CHECK (A_Gender IN('Male', 'Female')),
A_Password varchar(20),
Aroll varchar(20)NOT NULL CHECK (Aroll IN('SuperAdmin', 'Admin')),
MetaDescription varchar(256),
Media varchar(40),
RegisterDate datetime,
A_Status varchar(20)NOT NULL CHECK (A_Status IN('Active', 'Disable'))

)

Я думаю, что эти значения должны быть вставлены в базу данных, несмотря на то, что это дает ошибку.

1 Ответ

2 голосов
/ 18 мая 2019

Ошибка, вероятно, вызвана наличием скобок после имени таблицы, но это простое исправление.
Ваша настоящая проблема заключается в конкатенации строк для ваших значений.
Это нет-нет в мире sql, потому что это может быть источником многих ошибок синтаксического анализа (например, наличие одинарной кавычки в значениях может нарушить синтаксис, и DateTime.Now преобразуется в строка, соответствующая правилам, которые не всегда понятны движку sql parser).

Но самым важным является возможность инъекции Sql.
Вот несколько ссылок, чтобы начать ваше обнаружение для этой большой угрозы безопасности
Как я могу объяснить Sql Injection без технического жаргона .
Как работает SQL-инъекция из комикса XKCD «Таблицы Бобби»?

Таким образом, единственное исправление - через параметризованный запрос.

string str = "insert into AdminAssistant 
              (Aname,Aphone,Amail,A_Address,A_City,A_Gender,A_Password,
               Aroll,MetaDescription,Media,RegisterDate,A_Status)
               values(@name,@phone,@mail,@address,@city,@gender,@pass
                      @roll,@descr,@media,@regdata,'Active')";
using(SqlConnection con = new SqlConnection(......))
using(SqlCommand cmd = new SqlCommand(str, con))
{
    con.Open();
    cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = TextBox7.Text; 
    ... other varchar parameters
    cmd.Parameters.Add("@regdataq", SqlDbType.DateTime).Value = DateTime.Now; 
    ... complete the parameters collection
    cmd.ExecuteNonQuery();
}        

И я забыл поговорить о хранении паролей в виде открытого текста в базе данных. Это еще одно очень важное соображение для вашей безопасности. Вот еще одна ссылка с полезной информацией

Лучший способ сохранить пароль в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...