1
我有一個表的SQL Server實例,它看起來像:ADO.net將新行插入到具有IDENTITY列的表中,該如何正確執行該操作?
IF OBJECT_ID(N'dbo.employees', N'U') IS NOT NULL
DROP TABLE dbo.Employees;
GO
CREATE TABLE dbo.employees
(
id INT IDENTITY
PRIMARY KEY,
name NVARCHAR(20),
age TINYINT,
birthday DATETIME
);
我學習ADO.net,我想插入使用新的行插入表。我的代碼如下:
string connectionString = @"Server=.\sql2014;Database=Test;Trusted_connection=True;";
SqlConnection connection = new SqlConnection(connectionString);
SqlDataAdapter adapter = new SqlDataAdapter("select * from dbo.employees", connection);
new SqlCommandBuilder(adapter);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "employees");
dataSet.Tables[0].Constraints.Add("pk_employees", dataSet.Tables[0].Columns[0], true);
DataRow row = dataSet.Tables[0].NewRow();
row["id"] = 1;
row["name"] = "Hi";
row["age"] = 33;
row["birthday"] = "1982-10-09";
dataSet.Tables[0].Rows.Add(row);
adapter.Update(dataSet.Tables[0]);
MessageBox.Show("Inserted!");
表的id
列是IDENTITY屬性,這意味着會自動生成其值的。但是,我必須將row["id"]
設置爲某個整數值,否則我會收到錯誤「id列不全爲空」。當我使用SQL Server Profiler來捕獲執行的SQL,我發現執行的SQL的樣子:
exec sp_executesql N'INSERT INTO [dbo].[employees] ([name], [age], [birthday])
VALUES (@p1, @p2, @p3)',
N'@p1 nvarchar(4),@p2 tinyint,@p3 datetime',@p1=N'Hi',@p2=33,@p3='1982-10-09 00:00:00'
我想知道,什麼是插入在這樣一個表中的數據的正確方法是什麼?如果表已經有一些行,並且它的最大id是10.當我將row [「id」]設置爲一些小於10的值時,我會得到另一個錯誤「id列不允許重複值」。這是否意味着我需要在每次向表中插入新行之前獲取最大ID?