Sql Только для вставки идентификаторов 0 в C# - PullRequest
3 голосов
/ 02 марта 2020

Я пытаюсь использовать Sql Идентичность в моей таблице для столбца Нет. Если я пытаюсь вставить значение из таблицы с c#, всегда вставлять «0» и Identity не работает. Как я могу это исправить?

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();

Таблица кодов

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

1 Ответ

0 голосов
/ 02 марта 2020

Если пользователи могут и действительно предоставляют значение [No], то: это не IDENTITY в смысле SQL Server (хотя он все еще может быть первичным ключом и т. Д. c); поэтому решите:

  • , если вы хотите, чтобы он был 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...