根据我所学的课程连接到数据库
本文关键字:连接 数据库 程连接 | 更新日期: 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()));
}
此外,是否需要进行空检查?
它可以返回空数据,所以是的,绝对
代码看起来杂乱无章
这就是程序员的生活兄弟。对对象使用循环将节省空间。