Db 字段类型和 C# 字段类型?
Posted
技术标签:
【中文标题】Db 字段类型和 C# 字段类型?【英文标题】:Db field types and C# field types? 【发布时间】:2012-11-11 08:52:14 【问题描述】:假设我在 SQL 中有一个 SP:
CREATE PROCEDURE mySP
@LastName nvarchar(10),
@FirstName nvarchar(20)
AS
...
GO
在 c# 中没有指定长度的字符串类型。它的最大长度是2^32-1 ( IMHO)
那么,C# 开发人员有什么样的保护:不发送超过长度的字符串?
(我不认为任何 ORM 也有这个限制 - 也许我错了)。
唯一的方法(我明白了)是在之前(!)读取 Sp 参数并保存在缓存中,然后构建某种代理来负责这个。
但仍然 - 恐怕它只会在运行时失败。
我说的对吗?
有什么解决办法?
【问题讨论】:
【参考方案1】:C# 没有长度限制的字符串,检查必须在运行时完成。不过,这取决于您使用的 ORM。 EntityFramework 有一个MaxLength
属性,可用于装饰字符串。
【讨论】:
NHibernate 还允许您在映射配置中指定字符串的最大长度,但它仅在从 NHibernate 映射生成数据库模式时使用。正如@zmbq 所说,您的检查必须在运行时完成。不过,您还应该在数据库中设置此限制,以便如果您的程序出现问题,数据库将不允许存储无效字符串。【参考方案2】:使用if
条件检查你的字符串长度,如果超过要求的,不要调用该过程。
【讨论】:
以上是关于Db 字段类型和 C# 字段类型?的主要内容,如果未能解决你的问题,请参考以下文章