相关疑难解决方法(0)

如何在SQL Server中为用户定义的表类型添加索引或主键?

我有这个用户定义的类型,我想添加一个主键或索引:

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)

sql-server

30
推荐指数
4
解决办法
3万
查看次数

现在有办法将TVP传递给.Net Core上的精致吗?

我正在使用.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

UPDATE

玩了一下之后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)

c# sql reflection dapper .net-core

17
推荐指数
1
解决办法
2994
查看次数

收集参数用小巧玲珑查询oracle

在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 = …

c# oracle dapper

6
推荐指数
1
解决办法
2354
查看次数

如何通过 Dapper 使用 Oracle 的整数参数列表?

我正在尝试重新编写一些代码以使用 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: 缺少表达式。

我当前的解决方案基于以下帖子:

带有参数列表的 Dapper 查询以及 使用 Dapper 执行插入和更新

c# sql oracle sqlparameter dapper

4
推荐指数
1
解决办法
6711
查看次数

标签 统计

c# ×3

dapper ×3

oracle ×2

sql ×2

.net-core ×1

reflection ×1

sql-server ×1

sqlparameter ×1