映射 CLR 参数数据

2024-03-22

我正在编写一个存储过程生成器,我需要将 CLR 类型映射到它们的 SQL Server 类型。

MSDN 列出了类型映射:http://msdn.microsoft.com/en-us/library/ms131092.aspx http://msdn.microsoft.com/en-us/library/ms131092.aspx但我不想使用大的 switch 语句来处理映射。

是否有一种简单的方法可以使用 System.Data.SqlTypes 使用的任何进程以字符串形式检索 SQL Server 类型?

我想要一个像这样的方法签名:

static string GetSqlType(Type clrType)
{
    ...
    return sqlType;
}

因此,给出以下调用:

string sqlType = GetSqlType(1.GetType());

sqlType 应包含:“int”。


这变得相当复杂,因为它取决于您愿意针对哪个版本的 SQL Server。

  • With a 2008 target you would probably want instances of DateTime to map to the improved datetime2 http://technet.microsoft.com/en-us/library/bb677335.aspx rather than datetime.
    • TimeSpan 更糟糕,因为您的后备选项是使用 DateTime 或 varchar。

这是sql server将如何处理的指南复制场景中的数据类型 http://msdn.microsoft.com/en-us/library/ms143241.aspx

SQL Server Compact Edition 进一步增加了混乱,因为它不支持 varchar(max)、varbinary(max) 列类型(您只能使用显式的约 4K 长度列)。

在某些时候,您还需要对具有多个选项的领域做出启发式决策。

  • textual information may be varchar(n) or varchar(max).
    • 或从 2005 年起使用 XML
    • 或 TEXT 但已弃用
  • 十进制可以很好地映射到数字输入,但在输出上存在风险,因为数字具有更大的比例
  • should bitmaps be image or varbinary?
    • 图像再次被弃用,但这可能会惹恼仍在使用它的人。
  • Unsigned integers
    • uint 可以安全地放入 bigint
    • ulong的问题比较多
    • bigints http://msdn.microsoft.com/en-us/library/system.numerics.biginteger(VS.100).aspx会更有趣。

鉴于这一切,在实用程序函数中使用一个简单的 switch 语句将使生活比尝试依赖一些仅用于类型转换而不是文本 SQL 创建的不透明 BCL 库容易得多。
它还通过默认的 throw 或默认的 varchar(max) 清楚地表明您的“尚未定义”行为将仍然在您的控制之下。

从以下形式的方法返回一个简单的不可变类:

public sealed class SqlServerTypeDescription
{
    // for sql text construction
    public readonly string SqlServerName;
    // for code construction
    public readonly SqlDbType SqlDbType;
    // for code construction
    public readonly Type ClrType;

    // constructor etc.
}

您可能还想添加可选的精度/大小值,尽管您可能选择将其留给用户。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射 CLR 参数数据 的相关文章

随机推荐

  • 使用 ADO 在 IntraWeb 上共同初始化错误

    已经询问了邪恶交换 但一如既往 这没有帮助 我今天遇到这个问题 使用 IntraWeb 创建独立的 Web 应用程序时 当我尝试在浏览器中测试应用程序的会话时 我在 IDE 中遇到此异常 第一次机会例外 价格为 7C812A6B 异常类 E
  • 仅提取特定页面中使用的 css

    假设您有一个动态生成的网站 过去和现在都有太多人参与其中 并且您现在拥有一组包含超过 20 000 行 CSS 的共享样式表 它根本没有组织 有一些基于类和 id 的选择器 但也有太多基于标签的选择器 然后假设您有 100 个通过某个控制器
  • 按 R 中相似结果分组

    我想对相似的结果 不是唯一的 进行分组 但我不知道该怎么做 我的意思是 我有一个名为 name 的列的 df 它具有类似的结果 例如 ARPO ARPO S L ARPO SL 等 name address ARPO street 1 AR
  • sqoop导入或导出期间的不良记录处理

    我查看了 sqoop 导出操作提供的选项 但找不到任何处理不良记录的选项 例如 在大量记录中 偶尔可能会出现一个字符 而该字符应该是数字 有没有一种方法可以在 sqoop 中处理这些情况 而不会导致作业失败并在文件中提供错误记录 Sqoop
  • 如何将VM选项添加到jar文件中?

    我需要添加 Djava security policy myPolicyFile这样我的 RMI jar 就可以工作了 或者还有其他方法可以运行吗 如果你想在有人使用启动你的 jar 时添加 Djava jar 这是不可能的 因为不可能在
  • 如何制作可扩展的表格视图单元格?

    我想要一个表格视图单元格 当您点击它时 它的高度会增加以显示一些描述文本 当您再次点击它时 它会切换回较低的版本 这可能吗 如果可能的话 我将如何实现它 提前致谢 Use CGFloat tableView UITableView tabl
  • 使用 Spring MVC 框架清理用户输入

    我正在使用 spring mvc 框架开发 Web 应用程序 我想知道是否有任何最好的方法来清理用户输入或通用方法来清理 springs 中的所有用户输入以避免 XSS 和 Sql 注入攻击 您可以使用Filters在 Spring 框架中
  • 什么是 kthreadd 进程和子进程以及它与 init 和子进程有何不同

    我想知道什么是kthread以及为什么它不占用任何内存并且没有打开的文件 我编写了一些代码 它将简单地以父子树格式打印当前正在运行的进程的 PID 以及一些附加信息 例如使用的 VMZ RSS 线程 打开文件 PID 2 的所有子进程命名为
  • 垂直于给定点的直线

    如何从给定点在线段上绘制垂线 我的线段定义为 x1 y1 x2 y2 如果我从点 x3 y3 绘制垂直线并且它与点 x4 y4 上的线相交 我想找出这个 x4 y4 我帮你解了方程 k y2 y1 x3 x1 x2 x1 y3 y1 y2
  • Jquery $() - 它返回什么,$()[0] 是什么?

    我正在看一个如何使用 jqGrid 的示例 它是一个 jQuery 插件 它在 id 为 list 的 div 中绘制网格 它创建网格 list jqGrid 但它填充了网格 list 0 addJSONData 我一直在网上寻找关于 jQ
  • 使用 VueJS 生成从 1900 年到当前年份的年份

    我正在使用 VueJS 创建注册表单 用户必须输入他 她的出生日期 那么 我如何生成从 1900 年到当前年份的年份
  • 给定 n,找到相加得到 n 的最大数

    oracle面试时问的问题 例如 如果我的输入是6 那么 5 1 6 且 2 4 2 6 且 2 3 2 1 6 且 3 所以 最终答案应该是3 即需要3 2 1才能得到总和6 Note 不允许数字重复 即1 1 1 1 1 1 6 我用递
  • 检查neo4j图中是否存在节点

    NOTE 我让这成为几个问题 而不是我问的简单问题 所以我将后续问题分解为他们自己的问题here https stackoverflow com questions 22867148 creating unique relationship
  • 如何在同一行中滚动自定义布局和惰性列,就好像它们是一个组件一样

    我有一行包含一个惰性列和一个自定义布局 惰性列包含时间和包含已定位事件的自定义布局 它们具有不同的滚动状态 因此它们不会一起滚动 我怎样才能解决这个问题 因为我需要一个惰性列来跟踪我使用布局信息的日期 Composable fun Sche
  • 显示形状文件

    I have a shapefile http www arcgis com home item html id 3fd6eb2de569477ca83b2b65da8ecb6f that I want to display I tried
  • 如果在 Windows 8.1 应用程序中更新了子 ViewModel 之一的值,如何更新父 ViewModel 中的值

    我有一个 Windows 8 1 应用程序 其父视图模型和子视图模型具有以下关系 父视图模型 class ParentViewModel private double parentAmount public double parentAmo
  • 为什么 [0, 1] 和 [1, 0] 之间的 Wasserstein 距离为零?

    由于概率不相等 Wasserstein 距离不应该是非零数吗 In 1 scipy stats wasserstein distance 0 1 1 0 Out 1 0 0 这是因为 scipy stats wasserstein dist
  • 种子是否会在不同的 Ruby 上生成相同的随机序列?

    假设我打电话srand 1234 然后调用rand 反复 无论我的环境如何 我都能保证获得相同的随机数序列吗 例如 红宝石 1 8 7 vs 1 9 3 vs 2 0 MRI 与 JRuby Windows Mac Linux 根据我的经验
  • 当 div 改变位置时如何使用 jQuery 监听?

    我想做这样的事情 myDiv positionChanged function alert Yay 有任何想法吗 这是否已经以某种方式内置到 jQuery 中了 我最终使用了这个 function whereIChangePosition
  • 映射 CLR 参数数据

    我正在编写一个存储过程生成器 我需要将 CLR 类型映射到它们的 SQL Server 类型 MSDN 列出了类型映射 http msdn microsoft com en us library ms131092 aspx http msd