Sql 在 C# 中标识仅插入值 0

Sql Identity Inserting Value Only 0 in C#

我尝试在 table 的 No 列中使用 Sql Identity。如果我尝试使用 c# 从 table 插入值,总是插入“0”并且身份不工作。我该如何解决这个问题?

SqlCommand Cmd_IdentityOpen;
string SqlIdentityOpen = "SET identity_insert " + cbbox_ltable.Text + " on";
SqlIdentityOpen += " INSERT INTO " + cbbox_ltable.Text + " ([No], [Computer ID], [Name Surname] ) Values ('" + txtbox_lno.Text + "' , '" + cbbox_lcid.Text + "' , '" + txtbox_lnamesurname.Text + "' )";
Cmd_IdentityOpen = new SqlCommand(SqlIdentityOpen, con);
con.Open();
Cmd_IdentityOpen.ExecuteNonQuery();
con.Close();

Table代码

SqlTableCreate += "CREATE TABLE " + txtbox_ltablename.Text + " ([No] int not null IDENTITY(1,1) PRIMARY KEY, [Computer ID] nvarchar(50), [Name Surname] nvarchar(50) )";

如果用户能够并且确实提供了 [No] 值,那么:它不是 SQL 服务器意义上的 IDENTITY(尽管它仍然可以是主键, ETC);所以决定:

  • 如果你想要它是一个IDENTITY,不要让用户提供它,不要将它包含在INSERT中,并使用SCOPE_IDENTITY()找出 插入
  • 之后你得到了什么
  • 如果您不需要它成为一个 IDENTITY,请不要将其声明为一个

混合搭配很少奏效。

无关,但是您真的,真的需要研究SQL注入和参数化;该代码非常危险。安全命令更像是:

cmd.CommandText @"
INSERT INTO YourTable ([Computer ID], [Name Surname])
VALUES (@id, @name);
SELECT SCOPE_IDENTITY();");
cmd.Parameters.AddWithValue("@id", cbbox_lcid.Text);
cmd.Parameters.AddWithValue("@name", txtbox_lnamesurname.Text);
var newId = (int)cmd.ExecuteScalar();