SQL 错误:不存在到已知托管提供程序类型的映射

问题描述 投票:0回答:1

我收到此错误:

System.ArgumentException   HResult=0x80070057   Message=No mapping
exists from object type
System.Collections.Generic.List`1[[System.Data.SqlClient.SqlParameter,
System.Data, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089]] to a known managed provider native
type.   Source=<Cannot evaluate the exception source>

我用谷歌搜索过,示例是有人尝试使用对象而不是文本值作为

SqlParameter
值。比如,他们尝试使用
someControl
而不是
someControl.Text
。在我的例子中,下面的
toStatus
fromStatus
已经是字符串了。我不确定还有什么问题。我错过了什么?

public void UpdateStatus(SearchCriteria searchCriteria, string fromStatus, string toStatus)
{
  var sql = new StringBuilder();
  var sqlParameters = new List<SqlParameter>();

  sql.Append("UPDATE Schema.Table SET Status = @toStatus WHERE Status = @fromStatus");

  sqlParameters.Add(new SqlParameter("@toStatus", toStatus) { SqlDbType = SqlDbType.VarChar });
  sqlParameters.Add(new SqlParameter("@fromStatus", fromStatus) { SqlDbType = SqlDbType.VarChar });

  db.ExecuteSqlCommand(sql.ToString(), sqlParameters);
}
c# sql-server ado.net
1个回答
3
投票

ExecuteSqlCommand
需要一个数组而不是
List

使用方法如下

db.ExecuteSqlCommand(sql.ToString(), sqlParameters.ToArray());
© www.soinside.com 2019 - 2024. All rights reserved.