C# 表值参数

C# 表值参数,c#,sql-server,C#,Sql Server,将TVP传递到存储过程时出错 我的代码是 SqlConnection con=new SqlConnection(); con.Open(); SqlCommand cmd=new SqlCommand("SPName",con); DataTable dataTable = new DataTable("vpTableGuid"); dataTable.Columns.Add("id1", typeof(Guid)); dataTable.Columns.Add("rowNum", ty

将TVP传递到存储过程时出错

我的代码是

SqlConnection con=new SqlConnection();
con.Open();

SqlCommand cmd=new SqlCommand("SPName",con);

DataTable dataTable = new DataTable("vpTableGuid");

dataTable.Columns.Add("id1", typeof(Guid));
dataTable.Columns.Add("rowNum", typeof(Int32));

dataTable.Rows.Add(Guid.NewGuid(),1);
dataTable.Rows.Add(Guid.NewGuid(),2);
dataTable.Rows.Add(Guid.NewGuid(),3);

SqlParameter param = new SqlParameter("@evaluatorList", dataTable);                        
param.SqlDbType = SqlDbType.Structured;
param.TypeName = "dbo.vpTableGuid";

command.Parameters.Add(param);

command.ExecuteNonQuery();
上面的代码抛出一个错误:

不允许在表变量上插入标识列。
表值参数“@evaluatorList”的数据不符合该参数的表类型


无法在SQL中手动设置标识列

在SQL中定义主键列,如下所示:

id1 UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY
删除这行代码:

dataTable.Columns.Add("id1", typeof(Guid));

并将您的vpTableGuid定义更改为不包含id1列。

您也可以向我们展示存储过程的定义吗?显然,存储过程的期望值与您从C#调用它的方式之间存在差异……看起来您试图在作为标识的列中插入值。你的“id1”是什么类型的列?如果你也能显示
vpTableGuid
的定义,那会有帮助。你能提供你的表定义吗?它在抱怨一个
IDENTITY
列。根据定义,这不能是
uniqueidentifier
列,因此它不能抱怨
id1
。啊,好主意。那太傻了。我想我们需要看看他的TVP定义,也许还有存储过程。