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

(转)如何将数据库从SQL Server迁移到MySQL

从 python 使用 TSQL(SQL Server 上的 mssql)时,如何为 SQLAlchemy 自动生成 ORM 代码?

VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点

sql server数据库日志怎么清理

sql server 公共表达式(CTE)的简单应用