Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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# 无法在表中插入标识列的显式值_C#_Sql_Asp.net_Sql Server_Database - Fatal编程技术网

C# 无法在表中插入标识列的显式值

C# 无法在表中插入标识列的显式值,c#,sql,asp.net,sql-server,database,C#,Sql,Asp.net,Sql Server,Database,代码: 在文本框中插入数据时,会发生以下错误: 当identity\u insert设置为OFF时,无法在表“Customers”中插入identity列的显式值 对于标识列,不能显式插入数据。要显式地将数据插入标识列,您需要将标识\u insert设置为ON。您可以使用以下命令来完成此操作 SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[AddUpdateCustomer] @Cus

代码:

在文本框中插入数据时,会发生以下错误:

当identity\u insert设置为OFF时,无法在表“Customers”中插入identity列的显式值


对于标识列,不能显式插入数据。要显式地将数据插入标识列,您需要将标识\u insert设置为ON。您可以使用以下命令来完成此操作

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[AddUpdateCustomer]
      @CustomerID NCHAR(5),
      @ContactName NVARCHAR(30),
      @CompanyName NVARCHAR(40)
AS
BEGIN
      SET NOCOUNT ON;
    IF EXISTS(SELECT * FROM Customers WHERE CustomerID = @CustomerID)
    BEGIN
            UPDATE [Customers]
            SET [CompanyName] = @CompanyName
               ,[ContactName] = @ContactName
            WHERE CustomerID = @CustomerID
    END
    ELSE
    BEGIN
            INSERT INTO [Customers]
           ([CustomerID]
           ,[CompanyName]
           ,[ContactName])
        VALUES
           (@CustomerID
           ,@CompanyName
           ,@ContactName)
    END

    SELECT [CustomerID]
          ,[CompanyName]
          ,[ContactName]
      FROM Customers         
END

对于标识列,不能显式插入数据。要显式地将数据插入标识列,您需要将标识\u insert设置为ON。您可以使用以下命令来完成此操作

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[AddUpdateCustomer]
      @CustomerID NCHAR(5),
      @ContactName NVARCHAR(30),
      @CompanyName NVARCHAR(40)
AS
BEGIN
      SET NOCOUNT ON;
    IF EXISTS(SELECT * FROM Customers WHERE CustomerID = @CustomerID)
    BEGIN
            UPDATE [Customers]
            SET [CompanyName] = @CompanyName
               ,[ContactName] = @ContactName
            WHERE CustomerID = @CustomerID
    END
    ELSE
    BEGIN
            INSERT INTO [Customers]
           ([CustomerID]
           ,[CompanyName]
           ,[ContactName])
        VALUES
           (@CustomerID
           ,@CompanyName
           ,@ContactName)
    END

    SELECT [CustomerID]
          ,[CompanyName]
          ,[ContactName]
      FROM Customers         
END

那么你的问题到底是什么?您可以将
IDENTITY\u INSERT
设置为ON,也可以不插入ID。如果CustomerID是标识列,则它不是nchar。你知道“身份”是什么意思吗?那么你的问题到底是什么?您可以将
IDENTITY\u INSERT
设置为ON,也可以不插入ID。如果CustomerID是标识列,则它不是nchar。你知道“身份”是什么意思吗?我不相信这是OP真正想要的,但你至少应该提到你应该在事后关掉它。我不相信这是OP真正想要的,但您至少应该提到,您应该在之后将其关闭。不要忘记检查客户端是否已刷新
CustomerID
。不要忘记检查客户端是否已刷新
CustomerID
ALTER PROCEDURE [dbo].[AddUpdateCustomer]
      @CustomerID  INT           OUTPUT,
      @ContactName NVARCHAR(30),
      @CompanyName NVARCHAR(40)
AS
BEGIN
      SET NOCOUNT ON;
    IF EXISTS(SELECT * FROM Customers WHERE CustomerID = @CustomerID)
    BEGIN
            UPDATE [Customers]
            SET [CompanyName] = @CompanyName
               ,[ContactName] = @ContactName
            WHERE CustomerID = @CustomerID
    END
    ELSE
    BEGIN
        INSERT INTO [Customers]
           ([CompanyName]
           ,[ContactName])
        VALUES
           (@CompanyName
           ,@ContactName)
        SET @CustomerID = SCOPE_IDENTITY()
    END

    SELECT [CustomerID]
          ,[CompanyName]
          ,[ContactName]
    FROM Customers  
    WHERE [CustomerID] = @CustomerID
END