特殊函数¶
对于 SQL 中使用一些特殊函数, 例如 TO_CHAR 在神通驱动 .NET DATA PROVIDER
存在一些缺陷, 为了解决这个问题, .NET DATA PROVIDER 提供临时的解决方案,
需要在连接字符串中配置 SPECIALFUNCTIONCAST=TRUE. 对于在代码层面上,
不需要做任何的修改.
示例¶
[TestMethod]
public void TestSelect1BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.Date, Value = DateTime.Now });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect2BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.TimeStamp, Value = DateTime.Now });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect3BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.TimestampTZ, Value = DateTimeOffset.Now });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect4BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.Time, Value = TimeSpan.FromHours(22) });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect5BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.Intervaldts, Value = new TimeSpan(11, 22, 12, 23) });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect6BindMethod()
{
using var command = _connect.CreateCommand();
var now = DateTime.Now;
command.CommandText = "select to_char(@c1);";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.Intervalytm, Value = now });
try
{
using(var reader = command.ExecuteReader())
{
if(reader.Read())
{
var v1 = reader.GetString(0);
}
}
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
[TestMethod]
public void TestSelect7BindMethod()
{
using var command = _connect.CreateCommand();
command.CommandText = "select to_char(@c1),to_char(@c2),to_char(@c3),to_char(@c4),to_char(@c5),to_char(@c6),to_char(@c7)";
command.Parameters.Add(new OscarParameter { ParameterName = "c1", OscarDbType = OscarDbType.Int, Value = 122332 });
command.Parameters.Add(new OscarParameter { ParameterName = "c2", OscarDbType = OscarDbType.Integer, Value = 122332 });
command.Parameters.Add(new OscarParameter { ParameterName = "c3", OscarDbType = OscarDbType.BigInt, Value = 1223321223 });
command.Parameters.Add(new OscarParameter { ParameterName = "c4", OscarDbType = OscarDbType.Text, Value = "2323" });
command.Parameters.Add(new OscarParameter { ParameterName = "c5", OscarDbType = OscarDbType.Decimal, Value = 27238.23m });
command.Parameters.Add(new OscarParameter { ParameterName = "c6", OscarDbType = OscarDbType.Decimal, Value = 2223.23 });
command.Parameters.Add(new OscarParameter { ParameterName = "c7", OscarDbType = OscarDbType.Real, Value = (float)12.23 });
try
{
var reader = command.ExecuteReader();
}
catch (Exception e)
{
Assert.Fail(message: e.Message);
}
}
引用