カスタム作成の DB プロバイダーがあります。テストを実行すると、ExecuteScalar
コマンドでNullReferenceException
. ここで何が欠けているのでしょうか? 一部の人々がマルチスレッドの問題を抱えていると読んだことがありますが、それが私が遭遇しているものだとは「思いません」。
これが私の GetOpenConnection メソッドです
public SqliteConnection GetOpenConnection()
{
var connection = new SqliteConnection(_connectionString);
if (connection == null) throw new Exception("Could not create a database connection.");
connection.Open();
return connection;
}
そして ExecuteScalar メソッド
public TKey ExecuteScalar<TKey> ( string commandText, IDictionary<string, object> parameters )
{
using ( var connection = _connectionProvider.GetOpenConnection() )
{
using ( var command = connection.CreateCommand() )
{
command.CommandType = CommandType.Text;
command.CommandText = commandText;
foreach ( var parameter in parameters )
{
command.Parameters.Add( new SqliteParameter( parameter.Key, parameter.Value ?? DBNull.Value ) );
}
// BREAKING HERE
return ( TKey )command.ExecuteScalar();
}
}
}
これは、ExecuteScalar
private const string CheckTableExists = "SELECT name FROM sqlite_master WHERE type='table' AND name='{0}'";
public bool CheckIfTableExists ( string tableName )
{
var exists = ExecuteScalar<int>( string.Format( CheckTableExists, tableName ) ) == 1;
return exists;
}
ブレークポイントを置いて、そこにステップインしようとすると、コードが壊れて例外がスローされます...追跡できません