将枚举值写入db col

时间:2019-09-21 01:06:46

标签: c# sql-server stored-procedures enums

我使用的是我认为非常标准的C#和T-SQL代码,基于具有char(1)值的C#enum填充数据类型char的列:

我看到应该在写入*时将一个星号C写入db -但是我一直找不到一致的仓库,我也不知道怎么回事。

一些问题是如何将包含未包含在枚举中的值的行插入数据库?在此上下文中,星号是否有任何特殊含义?

这里的代表代码-出于可读性考虑而精简:

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 :(得分:0)

您似乎在代码中激活了Status和StatusEnum-两个不同的不相关枚举

您要将StatusEnum更改为Status

另外,字符串转换可以生成值“ Child”而不是“ C”作为FYI。

status.ToString()。Substring(0,1)-将拉取“ Child”的第一个字符而不是'C'的值