Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在表';中插入标识列的显式值;候选细节';当IDENTITY_INSERT设置为OFF时_C#_Sql - Fatal编程技术网

C# 无法在表';中插入标识列的显式值;候选细节';当IDENTITY_INSERT设置为OFF时

C# 无法在表';中插入标识列的显式值;候选细节';当IDENTITY_INSERT设置为OFF时,c#,sql,C#,Sql,我发现了这个错误。我应该如何解决这个问题 这是我的创建查询 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] [var

我发现了这个错误。我应该如何解决这个问题

这是我的创建查询

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()”行上遇到此错误。

您的
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注入


您应该创建一个接收这些参数的存储过程,或者使用
sp_executesql

只需从sql查询中删除id即可: 试试这个:

 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");
                }

删除id字段,因为它是自动生成的。如果它是一个非空列,并且您设置了identity\u insert以便可以手动设置它,那么您仍然必须提供一个非空值。此外,请检查如何看待“”。它可能无法将NULLValue放入NOTNULL列。从字符串到数字的转换错误可能失败。如果希望标识自动设置值,则从insert命令中删除对ID列的引用。