我使用的是我认为非常标准的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();
}
答案 0 :(得分:0)
您似乎在代码中激活了Status和StatusEnum-两个不同的不相关枚举
您要将StatusEnum更改为Status
另外,字符串转换可以生成值“ Child”而不是“ C”作为FYI。
status.ToString()。Substring(0,1)-将拉取“ Child”的第一个字符而不是'C'的值