Hi, Gerben. I'm not a Hibernate expert (I can only do the basics), but I was curious to see if I could come up with something. It's very ugly, but then, so is your situation. This is based on the QuickStart guide. Best of luck!
Code:
ISession session = NHibernateHelper.GetCurrentSession();
ITransaction tx = session.BeginTransaction();
Cat mitzi = new Cat
{
Name = "Cat 1"
, Sex = 'A'
, Weight = 4.2f
};
Cat todd = new Cat
{
Name = "Cat 2"
, Sex = 'B'
, Weight = 8f
};
session.Save(mitzi);
session.Save(todd);
tx.Commit();
IDbCommand command = session.Connection.CreateCommand();
command.CommandType = CommandType.Text;
command.CommandText =
@"DECLARE @COLUMNS TABLE(COLUMN_NAME NVARCHAR(30))
DECLARE @COLUMN_NAME NVARCHAR(30)
DECLARE @QUERY NVARCHAR(250)
SET @QUERY = 'SELECT '
INSERT INTO @COLUMNS SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'CAT'
SELECT TOP(1) @COLUMN_NAME = COLUMN_NAME FROM @COLUMNS
DELETE FROM @COLUMNS WHERE COLUMN_NAME = @COLUMN_NAME
SET @QUERY = @QUERY + @COLUMN_NAME
WHILE((SELECT COUNT(*) FROM @COLUMNS) > 0)
BEGIN
SELECT TOP(1) @COLUMN_NAME = COLUMN_NAME FROM @COLUMNS
DELETE FROM @COLUMNS WHERE COLUMN_NAME = @COLUMN_NAME
SET @QUERY = @QUERY + ', ' + @COLUMN_NAME
END
SET @QUERY = @QUERY + ' FROM CAT'
EXEC (@QUERY)";
tx.Enlist(command);
using (IDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.Out.WriteLine("===============");
for(Int32 i = 0; i < reader.FieldCount; i++)
{
String columnName = reader.GetName(i);
Console.Out.WriteLine(
"{0}: {1}"
, columnName
, reader[i]
);
}
}
}
Code:
===============
CatId: 1
Name: Cat 1
Sex: A
Weight: 4.2
===============
CatId: 2
Name: Cat 2
Sex: B
Weight: 8