skyscraper8/DataTableStorages/skyscraper5.Data.PostgreSql/NpgsqlParameterCollectionExtensions.cs
feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

87 lines
2.8 KiB
C#

using Npgsql;
using NpgsqlTypes;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace skyscraper5.Data.PostgreSql
{
internal static class NpgsqlParameterCollectionExtensions
{
public static void CheckNulls(this NpgsqlParameterCollection collection)
{
foreach (NpgsqlParameter o in collection)
{
if (o.Value == null)
o.Value = DBNull.Value;
else if (o.Value == DBNull.Value)
continue;
else
{
if (o.NpgsqlDbType == NpgsqlDbType.Text || o.NpgsqlDbType == NpgsqlDbType.Varchar)
{
string oValue = (string)o.Value;
oValue = oValue.Trim('\0');
o.Value = oValue;
}
}
}
}
public static void AddParameter(this NpgsqlParameterCollection collection, string parameterName, NpgsqlDbType columnType, object value)
{
if (value == null)
{
collection.AddWithValue(parameterName, columnType, DBNull.Value);
}
else
{
if (value is ushort && columnType == NpgsqlDbType.Integer)
{
collection.AddWithValue(parameterName, columnType, Convert.ToInt32((ushort)value));
}
else if (value is uint && columnType == NpgsqlDbType.Bigint)
{
collection.AddWithValue(parameterName, columnType, Convert.ToInt64((uint)value));
}
else
{
collection.AddWithValue(parameterName, columnType, value);
}
if (value is string)
{
string s = (string)value;
if (s.Contains("\0"))
s = s.Replace("\0", "");
}
}
}
public static byte[] GetByteArray(this NpgsqlDataReader dataReader, int ordinal)
{
if (dataReader.IsDBNull(ordinal))
return null;
Stream stream = dataReader.GetStream(ordinal);
byte[] buffer = new byte[stream.Length];
if (stream.Read(buffer, 0, buffer.Length) != buffer.Length)
throw new IOException("failed to read stream");
stream.Close();
return buffer;
}
public static void SetAllNull(this NpgsqlParameterCollection collection)
{
foreach (NpgsqlParameter o in collection)
{
o.Value = DBNull.Value;
}
}
}
}