在不先打开 DbConnection 的情况下使用它
Using DbConnection without opening it first
我正在使用 DbProviderFactories 提供的通用 DbConnection 访问数据库,我发现在使用连接之前不需要调用 Open。我提供了一个有效的示例代码(使用 "System.Data.SqlClient" 或 "Oracle.DataAccess.Client" 作为 providerInvariantName 参数)。我已经使用类似的代码执行了所有 CRUD 操作,而没有在连接上显式调用 Open,没有任何明显的错误。
我知道我不需要关闭它,因为 using 语句负责关闭和处理连接。
但是,这段代码什么时候打开连接呢?当我在关联的 DataAdapter 上调用 Fill 时它会自动打开吗?在使用连接对象之前不显式调用连接对象是否有任何后果?
因为如果它是不必要的,我可以为自己节省几行代码,我一定会这样做。 ;-)
DbProviderFactory myFactoryProvider = DbProviderFactories.GetFactory("System.Data.SqlClient");// same with "Oracle.DataAccess.Client"
using (var myConnection = myFactoryProvider.CreateConnection())
using (var myCommand = myFactoryProvider.CreateCommand())
{
try
{
// Set up the connection
myConnection.ConnectionString = _someConnectionString;
myCommand.Connection = myConnection;
myCommand.CommandText = "SELECT * FROM SOME_TABLE";
// Create DataAdapter and fill DataTable
DbDataAdapter dataAdapter = myFactoryProvider.CreateDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataTable myTable = new DataTable();
dataAdapter.Fill(myTable);
// Read the table and do something with the data
foreach (DataRow fila in myTable.Rows)
{
// Do something
}
}
catch (Exception e)
{
string message = e.ToString();
throw;
}
} //using closes and disposes the connection and the command
应该在语句
时建立并打开到数据库的连接
dataAdapter.Fill(myTable);
运行,所以你的代码运行良好
我正在使用 DbProviderFactories 提供的通用 DbConnection 访问数据库,我发现在使用连接之前不需要调用 Open。我提供了一个有效的示例代码(使用 "System.Data.SqlClient" 或 "Oracle.DataAccess.Client" 作为 providerInvariantName 参数)。我已经使用类似的代码执行了所有 CRUD 操作,而没有在连接上显式调用 Open,没有任何明显的错误。
我知道我不需要关闭它,因为 using 语句负责关闭和处理连接。 但是,这段代码什么时候打开连接呢?当我在关联的 DataAdapter 上调用 Fill 时它会自动打开吗?在使用连接对象之前不显式调用连接对象是否有任何后果? 因为如果它是不必要的,我可以为自己节省几行代码,我一定会这样做。 ;-)
DbProviderFactory myFactoryProvider = DbProviderFactories.GetFactory("System.Data.SqlClient");// same with "Oracle.DataAccess.Client"
using (var myConnection = myFactoryProvider.CreateConnection())
using (var myCommand = myFactoryProvider.CreateCommand())
{
try
{
// Set up the connection
myConnection.ConnectionString = _someConnectionString;
myCommand.Connection = myConnection;
myCommand.CommandText = "SELECT * FROM SOME_TABLE";
// Create DataAdapter and fill DataTable
DbDataAdapter dataAdapter = myFactoryProvider.CreateDataAdapter();
dataAdapter.SelectCommand = myCommand;
DataTable myTable = new DataTable();
dataAdapter.Fill(myTable);
// Read the table and do something with the data
foreach (DataRow fila in myTable.Rows)
{
// Do something
}
}
catch (Exception e)
{
string message = e.ToString();
throw;
}
} //using closes and disposes the connection and the command
应该在语句
时建立并打开到数据库的连接dataAdapter.Fill(myTable);
运行,所以你的代码运行良好