87 lines
2.8 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|