gpt4 book ai didi

c# - SqlParameterCollection 仅接受非空 SqlParameter 类型对象,而不接受 Microsoft.Data.SqlClient 中的 SqlParameter 对象

转载 作者:行者123 更新时间:2023-12-03 04:41:31 25 4
gpt4 key购买 nike

我正在尝试使用这些命名空间之一

//using Microsoft.Data.SqlClient;
using System.Data.SqlClient;

我的模型

public class Get_Data_Scholar{
[Key]
public Int32 ID_Transcript { get; set; }
public string Year_Semester { get; set; }
public string Period { get; set; }
public string Status { get; set; }
}

我的 Controller

        public JsonResult Get_GPA_Tuition (Int32 id)
{
var ID_NCS = new SqlParameter("@ID_NCS", id);
List<Get_data> get_Data = new List<Models.Get_Data_Scholar>();
get_Data = _applicationDbContext.Get_Data_Scholar.FromSql(
"EXEC [dbo].[Get_Data_Scholar] @ID"

, id
).ToList();

return Json(get_Data );
}

当我使用System.Data.SqlClient时,一切正常。但是当我将不同的命名空间更改为 Microsoft.Data.SqlClient 时,它会产生如下错误消息:

System.InvalidCastException HResult=0x80004002 Message=The SqlParameterCollection only accepts non-null SqlParameter type objects, not SqlParameter objects. Source=System.Data.SqlClient
StackTrace: at System.Data.SqlClient.SqlParameterCollection.ValidateType(Object value) at System.Data.SqlClient.SqlParameterCollection.Add(Object value) at Microsoft.EntityFrameworkCore.Storage.Internal.DynamicRelationalParameter.AddDbParameter(DbCommand command, Object value) at Microsoft.EntityFrameworkCore.Storage.Internal.CompositeRelationalParameter.AddDbParameter(DbCommand command, Object value) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary2 parameterValues) at
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.CreateCommand(IRelationalConnection
connection, IReadOnlyDictionary
2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary2
parameterValues) at
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteReader(IRelationalConnection
connection, IReadOnlyDictionary
2 parameterValues) at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable1.Enumerator.BufferlessMoveNext(Boolean
buffer) at
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState
state, Func
3 operation, Func3 verifySucceeded) at
Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable
1.Enumerator.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__172.MoveNext()
at
Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor
1.EnumeratorExceptionInterceptor.MoveNext() at System.Collections.Generic.List1.AddEnumerable(IEnumerable1 enumerable) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

当我使用System.Data.SqlClient时,可以绕过带有null值的SQL Server返回查询,而不会出现任何错误消息。但是当它更改为Microsoft.Data.SqlClient时,从SQL Server返回的查询必须进行特殊处理。那么,我该如何做/克服这个错误消息?我知道这个问题有点old style但是如何处理由于某些返回 null 列而导致的 非空 SqlParameter

我尝试更改 Microsoft.Data.SqlClient 命名空间的原因是,不久的将来,某些敏感列将使用 AKV ( AlwaysEncrypted ) 进行加密。

最佳答案

如果我正确理解你的问题,你是说当你的 sql 参数的值是文字 null 时,这种情况就会爆发,而你不希望这种情况发生。您需要检测 null 并使用 System.DBNull.Value。

关于c# - SqlParameterCollection 仅接受非空 SqlParameter 类型对象,而不接受 Microsoft.Data.SqlClient 中的 SqlParameter 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59499253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com