запись значения enum в db col - PullRequest
       4

запись значения enum в db col

0 голосов
/ 21 сентября 2019

Я использую то, что я считаю очень стандартным кодом C # и T-SQL, для заполнения столбца типа данных char(1) на основе C # enum значениями char:

Явижу звездочку *, записанную в дБ, когда C должен быть записан - но я не смог найти последовательного репо, и я понятия не имею, как это могло произойти.

Некоторые вопросы, как можнов мою базу данных будет вставлена ​​строка, содержащая значение, отсутствующее в моем перечислении?Имеет ли звездочка какое-то особое значение в этом контексте?

Вот типичный код - для удобства чтения:

CREATE TABLE [MY_TABLE](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [STATUS] [char](1) NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]


CREATE PROCEDURE [INSERT_TO_MY_TABLE]
(
   @status [char](1)
)
AS
BEGIN
  INSERT INTO [MY_TABLE]
  (
    [STATUS]
  )
  VALUES
  (
     @status
  )
END


public enum Status
{
    Adult = 'A',
    Juvenile = 'J',
    Child = 'C'
}
Statu status = Status.Child;
using (var command = connection.CreateCommand())
{
    command.CommandText = $"INSERT_TO_MY_TABLE";
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.Add(new SqlParameter($"@status", (char)status));
    command.ExecuteNonQuery();
}

1 Ответ

0 голосов
/ 21 сентября 2019

Похоже, что в вашем коде активны Status и StatusEnum - два разных несвязанных Enums

Вы хотите изменить StatusEnum на Status

Также приведение строки может генерировать значение «Child»вместо 'C' в качестве FYI.

status.ToString (). Substring (0, 1) - получит первый символ "Child", а не значение "C"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...