SQL Server (ORM) 从数据库中选择数据 - System.InvalidCastException
Posted
技术标签:
【中文标题】SQL Server (ORM) 从数据库中选择数据 - System.InvalidCastException【英文标题】:SQL Server (ORM) select data from database - System.InvalidCastException 【发布时间】:2021-05-21 11:42:40 【问题描述】:我尝试使用 SQL Server 和 Entity Framework Core (ORM) 从数据库中获取数据,但出现此错误:
System.InvalidCastException: '指定的强制转换无效。'
首先我创建了一个类来表示简单的数据库表:
public class Database : DbContext
public DbSet<info> info get; set;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
_ = optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["users"].ConnectionString);
public class info
public string Name get; set;
public int ID get; set;
然后我在web.config
中写了连接字符串如下:
<connectionStrings>
<add name="users"
connectionString="Server=DESKTOP-0VD537B\SQLEXPRESS;Database=users;trusted_connection=true;"
providerName="System.Data.SqlClient" />
</connectionStrings>
在ValuesController
中,POST
方法可以正常工作:
// POST api/values
public void Post([FromBody] string value)
using (var db = new Database())
var user = new info Name = "Name1", ID = 1 ;
db.info.Add(user);
_ = db.SaveChanges();
但是当我尝试从我的 GET
方法中显示数据时,我得到了那个错误
// GET api/values
public IEnumerable<string> Get()
List<string> users_arr = new List<string>();
using (var db = new Database())
var users = db.info;
foreach (var user in users)
users_arr.Add(user.ToString());
return users_arr;
enter image description here
【问题讨论】:
异常详细信息还有更多内容,您可以“复制详细信息”并将其作为文本而不是屏幕截图添加到您的问题中。 我解决了我的错误在信息类中的问题,我将 ID 声明为 int 但它在数据库中是 varchar 所以这就是我得到无效转换的原因。 【参考方案1】:1- 更改 ID 的类型以与数据库中的类型兼容
public class info
public string Name get; set;
public string ID get; set;
2- 在 post 方法中编辑 ID 的值。
// POST api/values
public void Post([FromBody] string value)
using (var db = new Database())
var user = new info Name = "Name1", ID = "1" ;
db.info.Add(user);
_ = db.SaveChanges();
Get 方法看起来像这样更好
// GET api/values
public IEnumerable<string> Get()
List<string> users_arr = new List<string>();
using (var db = new Database())
var users = db.info;
try
foreach (var user in users)
users_arr.Add("Name:"+user.Name+" ID:"+user.ID);
return users_arr;
catch (Exception e)
return new string[] "error:", e.Message ;
【讨论】:
以上是关于SQL Server (ORM) 从数据库中选择数据 - System.InvalidCastException的主要内容,如果未能解决你的问题,请参考以下文章
ORM 的哪些选择允许在“轻按开关”之间更改 RDBMS...SQL Server/SQL Azure 和 PostgreSQL/“云”PostgreSQL
从 python 使用 TSQL(SQL Server 上的 mssql)时,如何为 SQLAlchemy 自动生成 ORM 代码?