调用存储过程时,如何在表值参数中包含 RowVerson 列?

2024-02-08

如果我有一个包含 RowVersion 列的 SQLDataRecord,如下面的代码所示。我总是收到 SQL Server 错误 8052

传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。表值参数 %d(“%.*ls”),行 %I64d,列 %d:数据类型 0x%02X(用户定义的表类型)时间戳 列必须为默认值。

我将 RowVersion 值设置为 null 还是一个值。

我希望能够将现有记录的 RowVersion 值和新记录的 null 从 ADO.NET 发送到存储过程,这样我就可以在合并记录时使用乐观并发检查。

如何才能做到这一点?

namespace MyApplication.DataAccess
{
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using Microsoft.SqlServer.Server;

    public interface IRowVersionRecord
    {
        Byte[] RowVersionValue { get; set; }
        Int32? Somevalue { get; set; }
    }

    public class RowVersionRecordBase : IRowVersionRecord
    {
        public Byte[] RowVersionValue { get; set; }
        public Int32? Somevalue { get; set; }

        public static IEnumerable<SqlDataRecord> CreateSqlDataRecordEnumerable(IEnumerable<IRowVersionRecord> dataTransferObjects)
        {
            var sqlMetaData = new SqlMetaData[]
            { new SqlMetaData("RowVersionValue", SqlDbType.Timestamp),
                new SqlMetaData("somevalue", SqlDbType.Int)
            };
            var record = new SqlDataRecord(sqlMetaData);
            foreach (var dto in dataTransferObjects)
            {
                record.SetValue(0, dto.RowVersionValue);
                record.SetValue(1, dto.Somevalue);
                yield return record;
            }
        }
    }

    public partial class RowVersionRecord : RowVersionRecordBase
    {
    }
}

namespace MyApplication.DataAccess
{
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;

    public abstract class RowVersionDAOBase : DAO
    {
        public virtual void Upsert(IEnumerable<RowVersionRecord> values)
        {
            using (var connection = Connection)
            {
                using (var command = connection.CreateCommand())
                {
                    command.CommandType = CommandType.StoredProcedure;
                    command.CommandText = "RowVersion_Upsert";
                    ((SqlCommand)command).Parameters.Add("@values", SqlDbType.Structured).Value =
                        (object)RowVersionRecordBase.CreateSqlDataRecordEnumerable(values) ?? (object)DBNull.Value;                    
                    using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection | CommandBehavior.SequentialAccess))
                    {
                        while (reader.NextResult())
                        {
                            ///.....
                        }
                    }
                }
            }
        }
    }

    public partial class RowVersionDAO : RowVersionDAOBase
    {
    }
}

//Test code snip
[TestMethod]
public void RowVersionTVPTest()
{
    RowVersionRecord record = new RowVersionRecord();
    record.Somevalue = 1;
    List<RowVersionRecord> records = new List<RowVersionRecord>()
    {
        record
    };
    using (RowVersionDAO dao = new RowVersionDAO())
    {
        dao.Upsert(records);
    }
}

你永远无法控制a的内容rowversion列 - 但您已表示要为现有行提供特定值。

这表明你应该使用binary(8) or varbinary(8) http://technet.microsoft.com/en-us/library/ms182776.aspx(分别取决于 not-NULL/NULL)作为 TVP 中该列的数据类型。

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

调用存储过程时,如何在表值参数中包含 RowVerson 列? 的相关文章

  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • 使用不带参数的 Split() 时,默认分隔符是什么?

    所以我看了看String Split 今天 C 中的方法 我意识到你也可以向它传递零参数 这是我从未考虑过的 使用时默认的分隔符是什么Split 没有任何参数 如果没有值 则为空白 来源自here https msdn microsoft
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 用 C# 制作 Vista 风格的应用程序

    我正在运行 Windows Vista 并且希望外观看起来像常规 Vista 程序 有没有关于如何构建 Vista 风格应用程序的真正好的教程 文章 我还想学习如何使用本机代码并将其转换为 C 如this http bartdesmet n
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 从包含大量文件的目录中检索文件

    我的目录包含近 14 000 000 个 wav 格式的音频样本 所有普通存储 没有子目录 我想循环浏览文件 但是当我使用DirectoryInfo GetFiles 在该文件夹上 整个应用程序冻结了几分钟 可以用另一种方式完成吗 也许读取
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 为什么 C# 接口名称前面加上“I”

    这种命名约定背后的基本原理是什么 我没有看到任何好处 额外的前缀只会污染 API 我的想法与康拉德一致response https stackoverflow com a 222502 9898与此相关的question https sta
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio
  • 通过 cmake 链接作为外部项目包含的 opencv 库[重复]

    这个问题在这里已经有答案了 我对 cmake 比较陌生 经过几天的努力无法弄清楚以下事情 我有一个依赖于 opencv 的项目 它本身就是一个 cmake 项目 我想静态链接 opencv 库 我正在做的是我的项目中有一份 opencv 源
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 如何确定给定方法可以抛出哪些异常?

    我的问题和这个真的一样 找出 C 中方法可能抛出的异常 https stackoverflow com questions 264747 finding out what exceptions a method might throw in

随机推荐

  • 使按钮一次仅打开一个窗口(通过关闭顶级窗口来启用按钮)

    I want NewWinButton一次只创建一个新窗口 这意味着如果 if NewWin winfo exists 1 NewWinButton config state disabled else NewWinButton confi
  • iOS7 UIScrollView 在状态栏下方显示偏移内容

    我正在开发我的应用程序以与 iOS7 配合使用 我有一个 UINavigationController 我正在推送一个 UIViewController 里面有一个 ScrollView 在scrollView 里面我有一个tableVie
  • Pygame,角色移动速度

    我是犹他大学的一名学生 正在使用 Pygame 进行一个项目 但遇到了一些小问题 我已经编写了整个游戏的代码 并且运行完美 但我希望我的角色在走过某些地形时减慢移动速度 例如 如果他 她走过沙砖 我希望他 她的速度减半 我无法自己解决这个问
  • 在 R6 类上实现 S3 调度的正确方法

    我有一个R6类 我想添加一个S3的方法 我发现的文档简要提到为了使用S3派送于R6你必须有class TRUE 但我找不到应该如何完成的示例 我确实凭经验看到 只需以以下形式编写 S3 方法s3generic r6class有效 但我想知道
  • gulp - 在没有“require”的情况下编译 Vue 组件

    我试图了解如何使用 Gulp 构建组件 此时 我有一个如下所示的 Vue 组件 我的组件 vue
  • 如何从 n x n 矩阵生成等值线图?

    我有一个 n x n 矩阵称为o potential填充了一些值 并希望从中生成等高线图 我尝试了几种方法但没有成功 这就是我现在所拥有的 n 20 x arange 0 n 1 y arange 0 n 1 plt contourf x
  • 唯一标识 JavaScript 中的函数

    有什么方法可以唯一地标识一个函数而不给它一个 Expando 属性 我一直只是使用 toString 来标识函数 但是当两个函数相同时 它们会发生冲突 以下示例代码重现了该问题 在我的实际代码中 关联数组 myfunctions 的键也是根
  • 为什么我的 MKPointAnnotation 不是自定义的?

    我的 MKPointAnnotation 应该使用此代码进行自定义 MKPointAnnotation setAnnotation NSString title atLocation CLLocationCoordinate2D Locat
  • Froala 编辑器:单击 div 时插入插入符号位置

    我正在使用 Froala v2 6 1 当用户单击 div 时 我想在编辑器的最后一个插入符位置准确地插入一个字符串 但该字符串始终插入到编辑器的末尾 这是我所做的事情 div class variable USER ID div Jque
  • Firebase 身份验证不持久

    刷新页面后 身份验证似乎不再持续 即使使用后firebase auth Auth Persistence LOCAL 每当我登录我的应用程序时 它都会成功地将我重定向到仪表板 但是 刷新页面后 无法访问仪表板 这是我的代码 文件名 logi
  • 插入时出现 DbUpdateConcurrencyException

    我正在使用 Entity Framework 6 将数据插入表中以进行集成测试 当我执行以下代码时 我在调用 SaveChanges 时收到 DbUpdateConcurrencyException using var context ne
  • Vue @click.native 不起作用?

    我有这样的导航组件
  • 中accept函数的地址大小长度

    在 sys socket h 中它定义了函数 int accept int socket struct sockaddr address socklen t address len 我的问题与socklen t address len其基于
  • 使用 pyinstaller 运行规范文件时出现错误 22:无效模式('rb')或文件名:' '

    这是我的规格文件 mode python a Analysis final code py pathex C Python27 PyInstaller 2 1 final code hiddenimports hookspath None
  • React-router:通过路由传递数据

    我正在尝试找出通过路线传递数据的最佳方式 我知道我可以使用参数 但某些类型的数据不属于参数 例如 我有一个显示应用程序列表的索引页 每个应用程序旁边都有一个按钮 可将您引导至该应用程序的视图 我想将应用程序本身传递给应用程序处理程序 然而
  • 方法引用如何与具有不同实现函数名称的函数接口兼容?

    这里 对静态方法 isPrime 的引用作为第一个参数传递给 numTest 这是可行的 因为 isPrime 与 IntPredicate 函数接口兼容 因此 表达式 MyIntPredicates isPrime 计算为对对象的引用 其
  • Oracle WITH CLAUSE 不起作用?

    我尝试在查询中使用WITH子句 但不断收到消息 ORA 00942 表或视图不存在 我尝试创建一个简单的查询作为示例 WITH测试AS 从客户中选择 COUNT Customer ID 从测试中选择 但即使这样也不起作用 它只是给出了这样的
  • Spring / Glassfish 3.1.2 过时文件

    我目前正在使用 Spring Web MVC 和 Spring Security 开发一个应用程序 我可以在 Glassfish 3 1 2 上部署它 但是当我想在修复一些错误后重新部署时 我收到此错误 WARNING Exception
  • 如何将用户重定向到 Android 应用程序中的默认启动器?

    自从我尝试弄清楚如何开发一个使用 NFC 身份验证的 Android 解锁屏幕应用程序以来 已经有很长一段时间了 我正在使用 Nexus S 经过在互联网上的多次研究 我得出的结论是 目前不支持将锁屏替换为第三方应用程序 我们需要修改平台才
  • 调用存储过程时,如何在表值参数中包含 RowVerson 列?

    如果我有一个包含 RowVersion 列的 SQLDataRecord 如下面的代码所示 我总是收到 SQL Server 错误 8052 传入的表格数据流 TDS 远程过程调用 RPC 协议流不正确 表值参数 d ls 行 I64d 列