我有这个用户定义的类型,我想添加一个主键或索引:
IF NOT EXISTS (
SELECT *
FROM sys.types st
JOIN sys.schemas ss
ON st.schema_id = ss.schema_id
WHERE st.name = N'DistCritGroupData'
AND ss.name = N'dbo')
BEGIN
CREATE TYPE [dbo].[DistCritGroupData] AS TABLE
(
[DistCritTypeId] [int] NOT NULL,
[ItemAction] [int] NOT NULL,
[ObjectId] [int] NOT NULL,
[OperatorType] [int] NOT NULL
);
END;
GO
Run Code Online (Sandbox Code Playgroud)
我基本上想要添加主键或聚簇索引.我试过这个,但是我收到错误'找不到对象"dbo.DistCritGroupData",因为它不存在或者你没有权限.
CREATE TYPE [dbo].[DistCritGroupData] AS TABLE
(
[DistCritTypeId] [int] NOT NULL,
[ItemAction] [int] NOT NULL,
[ObjectId] [int] NOT NULL,
[OperatorType] [int] NOT NULL,
CONSTRAINT [DistCritGroupData0] PRIMARY KEY CLUSTERED
( …Run Code Online (Sandbox Code Playgroud) 我正在使用.net核心和dapper,第一个没有DataTables,第二个使用它们用于TVP.
我试图将a转换List<T>为a List<SqlDataRecord>,使用此列表创建一个SqlParameter然后将其转换为DynamicParameter但遗憾的是我得到了:The member of type Microsoft.SqlServer.Server.SqlDataRecord cannot be used as a parameter value
玩了一下之后IDynamicParameters,我就开始了.
扩展方法 IEnumerable
public static DynamicWrapper toTVP<T>(this IEnumerable<T> enumerable, string tableName, string typeName)
{
List<SqlDataRecord> records = new List<SqlDataRecord>();
var properties = typeof(T).GetProperties().Where(p => Mapper.TypeToSQLMap.ContainsKey(p.PropertyType));
var definitions = properties.Select(p => Mapper.TypeToMetaData(p.Name, p.PropertyType)).ToArray();
foreach (var item in enumerable)
{
var values = properties.Select(p => p.GetValue(item, null)).ToArray();
var schema = new SqlDataRecord(definitions);
schema.SetValues(values);
records.Add(schema);
}
SqlParameter result = new SqlParameter(tableName, SqlDbType.Structured); …Run Code Online (Sandbox Code Playgroud) 在WEB API服务中传递参数数组时遇到问题
public class SampleController : ApiController
{
public string Getdetails([FromUri] int[] id)
{
var inconditions = id.Distinct().ToArray();
using (var dbConn = new OracleConnection("DATA SOURCE=h;PASSWORD=C;PERSIST SECURITY INFO=True;USER ID=T"))
{
dbConn.Open();
var strQuery = "SELECT PRIO_CATEGORY_ID AS PRIO, LANG_ID AS LANG, REC_DATE AS REC, REC_USER AS RECUSER, DESCR, COL_DESCR AS COL, ROW_DESCR AS DROW, ABBR FROM STCD_PRIO_CATEGORY_DESCR WHERE REC_USER IN (:p)";
var queryResult = dbConn.Query<SamModel>(strQuery, new { p = inconditions });
return JsonConvert.SerializeObject(queryResult);
}
}
Run Code Online (Sandbox Code Playgroud)
现在在调用API时http://localhost:35432/api/Sample?id=1&id=83会抛出错误说明var queryResult = …
我正在尝试重新编写一些代码以使用 Dapper,以便我可以轻松使用参数。我正在尝试在 Oracle 数据库上执行 UPDATE 语句。要更新的列表IDs作为参数传入List<int>。我想为每个IDs传入的字段更新一个字段。以下是我所拥有的:
OracleConnection connection = ... // set earlier
public int IncreaseProcessCount(List<int> ids)
{
var rowsAffected = connection.Execute(@"UPDATE TABLE SET PROCESSED_COUNT = PROCESSED_COUNT + 1 WHERE ID IN @ids", new { ids });
return rowsAffected;
}
Run Code Online (Sandbox Code Playgroud)
在使用 Dapper 之前,执行语句运行得很好。现在我收到以下错误:
ORA-00936: 缺少表达式。
我当前的解决方案基于以下帖子: