c# - 企业库中等效的用户定义 SQL 类型
问题描述
我正在尝试传递参数,它是 SQL Server 中的表类型。我找不到兼容的 c# 类型。
我将多个参数传递给存储过程,其中一个参数是 SQL 中的用户定义类型。
Database Connection = new SqlDatabase(ConnectionString);
DbCommand Cmd= Connection.GetStoredProcCommand("ProcedureName");
..................
Connection.AddInParameter(Cmd, "@custom", DbType.Object, custom);
存储过程如下所示:
ALTER PROCEDURE [dbo].[ProcedureName]
@custom dbo.CstmType READONLY
AS
此代码引发以下错误:
传入的表格数据流 (TDS) 远程过程调用 (RPC) 协议流不正确。参数 6 ("@custom"):数据类型 0x62 (sql_variant) 的类型特定元数据的类型无效
我厌倦了在互联网上找到这个问题的答案。有人可以提供富有成效的建议如何解决此错误以及适当的数据类型应该是什么?
解决方案
在您的 C# 代码中,使用您在用户定义表类型中添加的相同字段创建 DataTable。如,
DataTable dt = new DataTable();
dt.Columns.Add("column1");
dt.Columns.Add("column2");
之后,在这个表中插入数据,比如,
dt.Rows.Add(new Object[]{ value1,value2 });
在过程调用中添加参数,如下所示,
SqlCommand cmd = new SqlCommand("ProcedureName", con)
cmd.CommandType = CommandType.StoredProcedure;
var List = new SqlParameter("@custom", SqlDbType.Structured);
List.TypeName = "CstmType";
List.Value = dt;
cmd.Parameters.Add(List);
在您的存储过程中,为用户定义的表类型添加参数
@custom dbo.CstmType READONLY
推荐阅读
- css - 向下滚动然后再次向上滚动时,顶部栏重叠标题 Wordpress
- rust - 不能将 x 作为可变借用,因为它也作为不可变错误借用
- firebase - 类型“_JsonQueryDocumentSnapshot”不是“字符串”类型的子类型
- questdb - QuestDB 中的自定义时间范围?
- javascript - 无法在我的“Color Flipper”游戏程序中更改背景颜色
- python - 处理大型数据集时,Python 脚本性能非常慢
- argo-workflows - 避免在 argo 资源中复制粘贴清单
- docker - 如何从外部连接到虚拟机中容器内的 Web 应用程序?
- typescript - 找不到模块 '!!raw-loader!./something.glsl' 或其对应的类型声明
- python - 如何提高 DBSCAN 的准确性?