gpt4 book ai didi

c# - SQLite ExecuteScalar 抛出 NullReferenceExcpetion

转载 作者:IT王子 更新时间:2023-10-29 06:31:54 26 4
gpt4 key购买 nike

我有一个自定义的书面数据库提供程序。当我运行我的测试时,它们会中断 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;
}

我在它上面放了一个断点,然后尝试进入它......代码只是中断并抛出异常......我无法追踪它

最佳答案

ExecuteScalar如果查询未返回任何记录,则返回 null。这似乎解决了 NullReferenceException。

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 ) );
}

if (typeof (TKey) != typeof (int))
{
return (TKey) command.ExecuteScalar();
}

var executeScalar = command.ExecuteScalar();
var item = executeScalar == null ? 0 : 1;
return (TKey)(object)item;

}
}
}

关于c# - SQLite ExecuteScalar 抛出 NullReferenceExcpetion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com