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# 字段类型?的主要内容,如果未能解决你的问题,请参考以下文章

C#中如何判断一个DateTime类型字段的日期为空?

DB2字段数据类型(常用)

DB2中如何将一个clob类型的字段改为varchar类型

C#各种字段类型对比

db2和oracle字段类型对比

Mysql中修改字段类型、长度以及添加删除列