You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EntityFrameworkCore.Jet/test/EFCore.Jet.IntegrationTests/Helpers.cs

145 lines
4.3 KiB
C#

using System;
using System.Data;
using System.Data.Common;
using EntityFrameworkCore.Jet.Data;
using System.Data.Odbc;
using System.Diagnostics;
using System.IO;
namespace EntityFrameworkCore.Jet.IntegrationTests
{
static class Helpers
{
public const string DefaultJetStoreName = "Jet.accdb";
public static int CountRows(JetConnection jetConnection, string sqlStatement)
{
DbCommand command = jetConnection.CreateCommand(sqlStatement);
DbDataReader dataReader = command.ExecuteReader();
int count = 0;
while (dataReader.Read())
count++;
return count;
}
public static void ShowDataReaderContent(DbConnection dbConnection, string sqlStatement)
{
DbCommand command = dbConnection.CreateCommand();
command.CommandText = sqlStatement;
DbDataReader dataReader = command.ExecuteReader();
bool first = true;
for (int i = 0; i < dataReader.FieldCount; i++)
{
if (first)
first = false;
else
Console.Write("\t");
Console.Write(dataReader.GetName(i));
}
Console.WriteLine();
while (dataReader.Read())
{
first = true;
for (int i = 0; i < dataReader.FieldCount; i++)
{
if (first)
first = false;
else
Console.Write("\t");
Console.Write("{0}", dataReader.GetValue(i));
}
Console.WriteLine();
}
}
public static void ShowDataTableContent(DataTable dataTable)
{
bool first = true;
foreach (DataColumn column in dataTable.Columns)
{
if (first)
first = false;
else
Console.Write("\t");
Console.Write(column.ColumnName);
}
Console.WriteLine();
foreach (DataRow row in dataTable.Rows)
{
first = true;
foreach (DataColumn column in dataTable.Columns)
{
if (first)
first = false;
else
Console.Write("\t");
Console.Write("{0}", row[column]);
}
Console.WriteLine();
}
}
public static string GetTestDirectory()
{
return System.AppDomain.CurrentDomain.BaseDirectory;
}
public static string GetJetStorePath(string storeName = null)
{
return Path.Combine(GetTestDirectory(), storeName ?? GetStoreNameFromCallStack());
}
public static DbConnection GetJetConnection(string storeName = null)
=> new JetConnection(JetConnection.GetConnectionString(GetJetStorePath(storeName ?? GetStoreNameFromCallStack()), Helpers.DataAccessProviderFactory), Helpers.DataAccessProviderFactory);
private static string GetStoreNameFromCallStack(int frames = 1)
{
var callerClassName = new StackTrace()
.GetFrame(frames + 1)
.GetMethod()
.ReflectedType
.Name;
return callerClassName + ".accdb";
}
public static JetConnection CreateAndOpenJetDatabase(string storeName = null)
{
var connection = new JetConnection(CreateJetDatabase(storeName));
connection.Open();
return connection;
}
public static string CreateJetDatabase(string storeName = null)
{
storeName ??= GetStoreNameFromCallStack();
DeleteJetDatabase(storeName);
JetConnection.CreateDatabase(storeName);
return storeName;
}
public static void DeleteJetDatabase(string storeName = null)
{
JetConnection.ClearAllPools();
JetConnection.DropDatabase(storeName ?? GetStoreNameFromCallStack());
}
public static DbProviderFactory DataAccessProviderFactory { get; set; } = OdbcFactory.Instance;
}
}