Невозможно вставить явное значение для столбца идентификаторов в таблице 'DedeDetails', когда для IDENTITY_INSERT установлено значение OFF - PullRequest
0 голосов
/ 13 июня 2018

Я получаю эту ошибку.Как мне решить эту проблему?

Это мой запрос на создание

CREATE TABLE [dbo].[candidatedetails](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [cname] [varchar](50) NULL,
    [pname] [varchar](50) NULL,
    [cno] [varchar](50) NULL,
    [pno] [varchar](50) NULL,
    [address] [varchar](max) NULL,
    [year] [varchar](50) NULL,
    [class] [varchar](50) NULL,
    [branch] [varchar](50) NULL,
    [totalfees] [numeric](18, 0) NULL,
    [paidfees] [numeric](18, 0) NULL,
    [pendingfees] [numeric](18, 0) NULL,
    [idno] [int] NULL,
 CONSTRAINT [PK_candidatedetails] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)

Это код

SqlConnection con = new SqlConnection(constring);
            con.Open();
            if(con.State==ConnectionState.Open)
            {
                string q = "INSERT INTO candidatedetails(id,cname,pname,cno,pno,address,year,class,branch,totalfees,paidfees,pendingfees,idno) VALUES ('','"+cname+"','"+pname+"','"+cno+"','"+pno+"','"+address+"','"+year+"','"+class1+"','"+branch+"','"+totalfees+"','"+paidfees+"','"+pendingfees+"','"+idno+"')";
                SqlCommand com = new SqlCommand(q, con);
                com.ExecuteNonQuery();
                MessageBox.Show("Candidate is registered");
            }

Я получаю эту ошибку на линии "com.executenonquery() "

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

просто удалите id форму sql запроса: Попробуйте это:

 SqlConnection con = new SqlConnection(constring);
                con.Open();
                if(con.State==ConnectionState.Open)
                {
                    string q = "INSERT INTO candidatedetails(cname,pname,cno,pno,address,year,class,branch,totalfees,paidfees,pendingfees,idno) VALUES ('"+cname+"','"+pname+"','"+cno+"','"+pno+"','"+address+"','"+year+"','"+class1+"','"+branch+"','"+totalfees+"','"+paidfees+"','"+pendingfees+"','"+idno+"')";
                    SqlCommand com = new SqlCommand(q, con);
                    com.ExecuteNonQuery();
                    MessageBox.Show("Candidate is registered");
                }
0 голосов
/ 13 июня 2018

Ваш столбец id объявлен как IDENTITY, поэтому он автоматически генерирует значение при вставке.Вам не нужно включать его в список вставляемых столбцов или указывать для него значение.

string q = "INSERT INTO candidatedetails(cname,pname,cno,pno,address,year,class,branch,totalfees,paidfees,pendingfees,idno) VALUES ('"+cname+"','"+pname+"','"+cno+"','"+pno+"','"+address+"','"+year+"','"+class1+"','"+branch+"','"+totalfees+"','"+paidfees+"','"+pendingfees+"','"+idno+"')";

Кроме того, остерегайтесь динамического генерирования SQL, как это, он подвержен ошибкам (если одно из ваших значений имеет, например, неэкранированную одинарную кавычку) и SQL-инъекция , если значения получены из пользовательского ввода или другого небезопасного источника.

Вы должны либо создать хранимую процедуру, которая получает эти параметры, либо создать sql с помощью sp_executesql.

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