首页 > 解决方案 > 带有 Npgsql 的 C# - 无法使用处理程序类型 Int32Handler 编写 CLR 类型 System.String

问题描述

我尝试将整数添加到 Postgresql 数据库时遇到问题。Varchars 工作正常,但是当我使用代码时:

var parameter = cmd.CreateParameter();
parameter.Value = Int32.Parse(x.Value.ToString());
Console.WriteLine(parameter.Value);
parameter.ParameterName = x.Key.ToString();
cmd.Parameters.Add(new NpgsqlParameter("confirmations",NpgsqlTypes.NpgsqlDbType.Integer));
for (int search=0; search != cmd.Parameters.Count; search++)

执行时出错,我使用的是:

 cmd.ExecuteNonQuery();

听上去像:

数据库问题:System.InvalidCastException: Can't write CLR type System.String with handler type Int32Handler\

在 lambda_method(闭包,NpgsqlTypeHandler,对象,NpgsqlLengthCache&,NpgsqlParameter)

在 C:\projects\npgsql\src\Npgsql\NpgsqlParameter.cs:line 553 中的 Npgsql.NpgsqlParameter.ValidateAndGetLength()

在 C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 793 中的 Npgsql.NpgsqlCommand.ValidateParameters()

在 C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1141 中的 Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior 行为,布尔异步,CancellationToken cancelToken)

在 C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1042 中的 Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancelToken)

在 C:\projects\npgsql\src\Npgsql\NpgsqlCommand.cs:line 1025 中的 Npgsql.NpgsqlCommand.ExecuteNonQuery()

在 /Users/kamilkostrzewski/Projects/BitcoinType/BitcoinType/Program.cs:line 261 中的 BitcoinType.DatabaseManager.MakeInsert(Dictionary`2 requestData)

对我没有帮助。

标签: c#postgresqlnpgsql

解决方案


我有这个问题,我像这样解决了。在我的数据库中,我有一列输入整数。如果要在此列中添加数据,则应使用 NpgsqlDbType.Integer数据类型。但是当我使用NpgsqlDbType.String数据类型时,我得到了那个错误。

所以你应该改变你的 NpgsqlDBtType。我希望它对你有帮助。


推荐阅读