根据我所学的课程连接到数据库

本文关键字:连接 数据库 程连接 | 更新日期: 2023-09-27 18:21:48

我正在学习一门在线课程,在课程中,他们解释了如何从数据库中检索数据。创建连接和命令是由DbProviderFactories类完成的。我理解课程中的代码,但是否需要使用using进行连接、命令和读取器?此外,是否需要进行空检查?代码看起来很混乱,如果你的数据库中有很多模型(大陆、国家、货币…),它将需要大量的复制/粘贴,这很糟糕吗?

因此,真正的问题是,下面的代码是好是坏,还有什么可以改进的?目标是使用SQLite作为数据库提供程序。这与下面的方法有效吗?

public static ObservableCollection<Continent> GetContinents()
{
    var continents = new ObservableCollection<Continent>();
    var provider = ConfigurationManager.ConnectionStrings["DbConnection"].ProviderName;
    var connectionString = ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;
    using (var connection = DbProviderFactories.GetFactory(provider).CreateConnection())
    {
        if (connection == null) return null;
        connection.ConnectionString = connectionString;
        connection.Open();
        using (var command = DbProviderFactories.GetFactory(provider).CreateCommand())
        {
            if (command == null) return null;
            command.CommandType = CommandType.Text;
            command.Connection = connection;
            command.CommandText = "SELECT * FROM Continent";
            using (var reader = command.ExecuteReader())
                while (reader.Read())
                    continents.Add(new Continent(reader["Code"].ToString(), reader["EnglishName"].ToString()));
        }
    }
    return continents;
}

根据我所学的课程连接到数据库

是否需要使用连接、命令和读取器?

是的。在这里我评论了代码

using (var command = DbProviderFactories.GetFactory(provider).CreateCommand()) // here you've created the command
            {
                if (command == null) return null;
                command.CommandType = CommandType.Text;
                command.Connection = connection;
                command.CommandText = "SELECT * FROM Continent";
                using (var reader = command.ExecuteReader()) //Here you're reading what the command returned.
                    while (reader.Read())
                        continents.Add(new Continent(reader["Code"].ToString(), reader["EnglishName"].ToString()));
            }

此外,是否需要进行空检查?

它可以返回空数据,所以是的,绝对

代码看起来杂乱无章

这就是程序员的生活兄弟。对对象使用循环将节省空间。