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.
145 lines
4.3 KiB
C#
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;
|
|
}
|
|
} |