【问题标题】:SQL Server (ORM) select data from database - System.InvalidCastExceptionSQL Server (ORM) 从数据库中选择数据 - 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 所以这就是我得到无效转换的原因。

标签: c# sql-server api orm entity-framework-core


【解决方案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 };
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多