C# 列Id为标识(1,1)的用户定义表类型
我使用用户定义的表类型作为过程中的参数,该用户定义的表有一列C# 列Id为标识(1,1)的用户定义表类型,c#,sql-server,ado.net,user-defined-types,C#,Sql Server,Ado.net,User Defined Types,我使用用户定义的表类型作为过程中的参数,该用户定义的表有一列Id,该列设置了identity标志 问题: CREATE TYPE [dbo].[UdtTable] AS TABLE ( [Id] [INT] IDENTITY(1, 1), [StudentId] [INT] NOT NULL
Id
,该列设置了identity
标志
问题:
CREATE TYPE [dbo].[UdtTable] AS TABLE
(
[Id] [INT] IDENTITY(1, 1),
[StudentId] [INT] NOT NULL
)
当直接在SQL Server中执行我的过程时,它是工作的,但当我从C#代码调用这个过程时,它不工作,但也没有显示任何错误
此查询运行良好:
DECLARE @TableUDT [UdtTable];
INSERT INTO @TableUDT
SELECT 201;
INSERT INTO @TableUDT
SELECT 202;
EXEC MYProcName @TableUDT
但这不起作用:
DataTable udtDataTable = new DataTable();
udtDataTable.Columns.Add("StudentId");
DataRow dRow = udtDataTable.NewRow();
dRow["StudentId"] = 201
udtDataTable.Rows.Add(dRow)
DataRow dRow2 = udtDataTable.NewRow();
dRow2["StudentId"] = 201
udtDataTable.Rows.Add(dRow2)
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@TableLeaveID", udtDataTable));
DataTable = new DML.RunProcedure("MyProcName",parameters);
DataTable udtDataTable=newdatatable();
udtDataTable.Columns.Add(“StudentId”);
DataRow dRow=udtDataTable.NewRow();
卓尔[“学生ID”]=201
udtDataTable.Rows.Add(dRow)
DataRow dRow2=udtDataTable.NewRow();
dRow2[“学生ID”]=201
udtDataTable.Rows.Add(dRow2)
列表参数=新列表();
Add(新的SqlParameter(“@TableLeaveID”,udtDataTable));
DataTable=新的DML.RunProcedure(“MyProcName”,参数);
注意:根据我的过程,它应该返回一个表。有三件事可以作为表值参数传递:
- 数不清
- 数据表
- DbDataReader
IEnumerable
关键点是为该列使用构造函数,该构造函数将useServerDefault
设置为true
以获得Id
参数
var sqlMetaData = new[]
{
new SqlMetaData("Id", SqlDbType.Int, true, false, SortOrder.Unspecified, -1),
new SqlMetaData("StudentId", SqlDbType.Int)
};
var record = new SqlDataRecord(sqlMetaData);
record.SetInt32(1, 201);
List<SqlDataRecord> sqlRecords = new List<SqlDataRecord>();
sqlRecords.Add(record);
parameters.Add(new SqlParameter("@TableLeaveID", sqlRecords));
var sqlMetaData=new[]
{
新的SqlMetaData(“Id”,SqlDbType.Int,true,false,SortOrder.Unspecified,-1),
新的SqlMetaData(“StudentId”,SqlDbType.Int)
};
var记录=新的SqlDataRecord(sqlMetaData);
SetInt32(1201);
List sqlRecords=new List();
添加(记录);
添加(新的SqlParameter(“@TableLeaveID”,sqlRecords));
您需要调用udtDataTable.Rows.Add(dRow)
将这些新闻行实际添加到DataTable
!!现在,您只需要创建两个“自由浮动”的DataRow
实例,但它们没有添加到DataTable
!很抱歉我没提到那句话。我已经在使用udtDataTable.Rows.Add(dRow)进行添加。