538 lines
12 KiB
C#
538 lines
12 KiB
C#
|
// created on 27/12/2002 at 17:05
|
||
|
//
|
||
|
// Author:
|
||
|
// Francisco Figueiredo Jr. <fxjrlists@yahoo.com>
|
||
|
//
|
||
|
// Copyright (C) 2002 The Npgsql Development Team
|
||
|
// npgsql-general@gborg.postgresql.org
|
||
|
// http://gborg.postgresql.org/project/npgsql/projdisplay.php
|
||
|
//
|
||
|
// This library is free software; you can redistribute it and/or
|
||
|
// modify it under the terms of the GNU Lesser General Public
|
||
|
// License as published by the Free Software Foundation; either
|
||
|
// version 2.1 of the License, or (at your option) any later version.
|
||
|
//
|
||
|
// This library is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
// Lesser General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU Lesser General Public
|
||
|
// License along with this library; if not, write to the Free Software
|
||
|
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
|
||
|
using System;
|
||
|
using System.Data;
|
||
|
using System.Web.UI.WebControls;
|
||
|
using Npgsql;
|
||
|
|
||
|
using NUnit.Framework;
|
||
|
using NUnit.Core;
|
||
|
|
||
|
namespace NpgsqlTests
|
||
|
{
|
||
|
|
||
|
[TestFixture]
|
||
|
public class DataReaderTests
|
||
|
{
|
||
|
|
||
|
NpgsqlConnection _conn;
|
||
|
|
||
|
[SetUp]
|
||
|
protected void SetUp()
|
||
|
{
|
||
|
//NpgsqlEventLog.Level = LogLevel.None;
|
||
|
//NpgsqlEventLog.Level = LogLevel.Debug;
|
||
|
//NpgsqlEventLog.LogName = "NpgsqlTests.LogFile";
|
||
|
_conn = new NpgsqlConnection (TestConfiguration.NpgsqlConnectionString);
|
||
|
}
|
||
|
|
||
|
[TearDown]
|
||
|
protected void TearDown()
|
||
|
{
|
||
|
if (_conn != null &&_conn.State != ConnectionState.Closed)
|
||
|
_conn.Close();
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void GetBoolean()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = 4;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
Boolean result = dr.GetBoolean(4);
|
||
|
Assert.AreEqual(true, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetChars()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = 1;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
Char[] result = new Char[6];
|
||
|
|
||
|
|
||
|
Int64 a = dr.GetChars(1, 0, result, 0, 6);
|
||
|
|
||
|
Assert.AreEqual("Random", new String(result));
|
||
|
/*ConsoleWriter cw = new ConsoleWriter(Console.Out);
|
||
|
|
||
|
cw.WriteLine(result);*/
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void GetInt32()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = 2;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
|
||
|
Int32 result = dr.GetInt32(2);
|
||
|
|
||
|
//ConsoleWriter cw = new ConsoleWriter(Console.Out);
|
||
|
|
||
|
//cw.WriteLine(result.GetType().Name);
|
||
|
Assert.AreEqual(4, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetInt16()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tableb where field_serial = 1;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
Int16 result = dr.GetInt16(1);
|
||
|
|
||
|
Assert.AreEqual(2, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetDecimal()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tableb where field_serial = 3;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
Decimal result = dr.GetDecimal(3);
|
||
|
|
||
|
|
||
|
Assert.AreEqual(4.2300000M, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetDouble()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tabled where field_serial = 2;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
//Double result = Double.Parse(dr.GetInt32(2).ToString());
|
||
|
Double result = dr.GetDouble(2);
|
||
|
|
||
|
Assert.AreEqual(.123456789012345D, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetFloat()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tabled where field_serial = 1;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
//Single result = Single.Parse(dr.GetInt32(2).ToString());
|
||
|
Single result = dr.GetFloat(1);
|
||
|
|
||
|
Assert.AreEqual(.123456F, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetString()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = 1;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
String result = dr.GetString(1);
|
||
|
|
||
|
Assert.AreEqual("Random text", result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetStringWithParameter()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_text = :value;", _conn);
|
||
|
|
||
|
String test = "Random text";
|
||
|
NpgsqlParameter param = new NpgsqlParameter();
|
||
|
param.ParameterName = "value";
|
||
|
param.DbType = DbType.String;
|
||
|
//param.NpgsqlDbType = NpgsqlDbType.Text;
|
||
|
param.Size = test.Length;
|
||
|
param.Value = test;
|
||
|
command.Parameters.Add(param);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
String result = dr.GetString(1);
|
||
|
|
||
|
Assert.AreEqual(test, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void GetStringWithQuoteWithParameter()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_text = :value;", _conn);
|
||
|
|
||
|
String test = "Text with ' single quote";
|
||
|
NpgsqlParameter param = new NpgsqlParameter();
|
||
|
param.ParameterName = "value";
|
||
|
param.DbType = DbType.String;
|
||
|
//param.NpgsqlDbType = NpgsqlDbType.Text;
|
||
|
param.Size = test.Length;
|
||
|
param.Value = test;
|
||
|
command.Parameters.Add(param);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
String result = dr.GetString(1);
|
||
|
|
||
|
Assert.AreEqual(test, result);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void GetValueByName()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = 1;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
String result = (String) dr["field_text"];
|
||
|
|
||
|
Assert.AreEqual("Random text", result);
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
[ExpectedException(typeof(InvalidOperationException))]
|
||
|
public void GetValueFromEmptyResultset()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_text = :value;", _conn);
|
||
|
|
||
|
String test = "Text single quote";
|
||
|
NpgsqlParameter param = new NpgsqlParameter();
|
||
|
param.ParameterName = "value";
|
||
|
param.DbType = DbType.String;
|
||
|
//param.NpgsqlDbType = NpgsqlDbType.Text;
|
||
|
param.Size = test.Length;
|
||
|
param.Value = test;
|
||
|
command.Parameters.Add(param);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
|
||
|
// This line should throw the invalid operation exception as the datareader will
|
||
|
// have an empty resultset.
|
||
|
Console.WriteLine(dr.IsDBNull(1));
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void TestOverlappedParameterNames()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = :a or field_serial = :aa", _conn);
|
||
|
command.Parameters.Add(new NpgsqlParameter("a", DbType.Int32, 4, "a"));
|
||
|
command.Parameters.Add(new NpgsqlParameter("aa", DbType.Int32, 4, "aa"));
|
||
|
|
||
|
command.Parameters[0].Value = 2;
|
||
|
command.Parameters[1].Value = 3;
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
[ExpectedException(typeof(IndexOutOfRangeException))]
|
||
|
public void TestNonExistentParameterName()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where field_serial = :a or field_serial = :aa", _conn);
|
||
|
command.Parameters.Add(new NpgsqlParameter(":b", DbType.Int32, 4, "b"));
|
||
|
command.Parameters.Add(new NpgsqlParameter(":aa", DbType.Int32, 4, "aa"));
|
||
|
|
||
|
command.Parameters[0].Value = 2;
|
||
|
command.Parameters[1].Value = 3;
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void UseDataAdapter()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea", _conn);
|
||
|
|
||
|
NpgsqlDataAdapter da = new NpgsqlDataAdapter();
|
||
|
|
||
|
da.SelectCommand = command;
|
||
|
|
||
|
DataSet ds = new DataSet();
|
||
|
|
||
|
da.Fill(ds);
|
||
|
|
||
|
//ds.WriteXml("TestUseDataAdapter.xml");
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void UseDataAdapterNpgsqlConnectionConstructor()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea", _conn);
|
||
|
|
||
|
command.Connection = _conn;
|
||
|
|
||
|
NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
|
||
|
|
||
|
DataSet ds = new DataSet();
|
||
|
|
||
|
da.Fill(ds);
|
||
|
|
||
|
//ds.WriteXml("TestUseDataAdapterNpgsqlConnectionConstructor.xml");
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void UseDataAdapterStringNpgsqlConnectionConstructor()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
|
||
|
NpgsqlDataAdapter da = new NpgsqlDataAdapter("select * from tablea", _conn);
|
||
|
|
||
|
DataSet ds = new DataSet();
|
||
|
|
||
|
da.Fill(ds);
|
||
|
|
||
|
//ds.WriteXml("TestUseDataAdapterStringNpgsqlConnectionConstructor.xml");
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void UseDataAdapterStringStringConstructor()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
|
||
|
NpgsqlDataAdapter da = new NpgsqlDataAdapter("select * from tablea", TestConfiguration.NpgsqlConnectionString);
|
||
|
|
||
|
DataSet ds = new DataSet();
|
||
|
|
||
|
da.Fill(ds);
|
||
|
|
||
|
ds.WriteXml("TestUseDataAdapterStringStringConstructor.xml");
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void UseDataAdapterStringStringConstructor2()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
|
||
|
NpgsqlDataAdapter da = new NpgsqlDataAdapter("select * from tableb", TestConfiguration.NpgsqlConnectionString);
|
||
|
|
||
|
DataSet ds = new DataSet();
|
||
|
|
||
|
da.Fill(ds);
|
||
|
|
||
|
ds.WriteXml("TestUseDataAdapterStringStringConstructor2.xml");
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void DataGridWebControlSupport()
|
||
|
{
|
||
|
|
||
|
_conn.Open();
|
||
|
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
DataGrid dg = new DataGrid();
|
||
|
|
||
|
dg.DataSource = dr;
|
||
|
dg.DataBind();
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
[ExpectedException(typeof(InvalidOperationException))]
|
||
|
public void ReadPastDataReaderEnd()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
while (dr.Read());
|
||
|
|
||
|
Object o = dr[0];
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void IsDBNull()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select field_text from tablea;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
Assert.AreEqual(false, dr.IsDBNull(0));
|
||
|
dr.Read();
|
||
|
Assert.AreEqual(true, dr.IsDBNull(0));
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
[Test]
|
||
|
public void IsDBNullFromScalar()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select max(field_serial) from tablea;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
Assert.AreEqual(false, dr.IsDBNull(0));
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
[Test]
|
||
|
public void TypesNames()
|
||
|
{
|
||
|
_conn.Open();
|
||
|
NpgsqlCommand command = new NpgsqlCommand("select * from tablea where 1 = 2;", _conn);
|
||
|
|
||
|
NpgsqlDataReader dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
Assert.AreEqual("int4", dr.GetDataTypeName(0));
|
||
|
Assert.AreEqual("text", dr.GetDataTypeName(1));
|
||
|
Assert.AreEqual("int4", dr.GetDataTypeName(2));
|
||
|
Assert.AreEqual("int8", dr.GetDataTypeName(3));
|
||
|
Assert.AreEqual("bool", dr.GetDataTypeName(4));
|
||
|
|
||
|
dr.Close();
|
||
|
|
||
|
command.CommandText = "select * from tableb where 1 = 2";
|
||
|
|
||
|
dr = command.ExecuteReader();
|
||
|
|
||
|
dr.Read();
|
||
|
|
||
|
Assert.AreEqual("int4", dr.GetDataTypeName(0));
|
||
|
Assert.AreEqual("int2", dr.GetDataTypeName(1));
|
||
|
Assert.AreEqual("timestamp", dr.GetDataTypeName(2));
|
||
|
Assert.AreEqual("numeric", dr.GetDataTypeName(3));
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|