Am Mittwoch 02 Juni 2010 14:46:07 schrieb Robert Jordan:
> Where are you setting this property? How is DBConnectionHandler
> implemented.
> 
This is the DBConnectionHandler:


using System;
using System.Data;
using System.Data.SqlTypes;
using Npgsql;

namespace iwawi.batchjobs
{
        
        /// <summary>
        /// The database connection handler used for batch jobs.
        /// </summary>
        public class DBConnectionHandler : ICloneable
        {
                public        readonly int    status   = 0;
                public static readonly string language = "DE";
                
                private IDbConnection conn;
                private DateTime      loginDate;
                private string        connectionString;
                private short         workstationID;
                private short         departmentID;
                private int           personID;
                private string        userName;
                private string        dbHostName;
                private string        dbInstanceName;
                private string        dbVersion;
                private string []     dbparams;
                
                private static ushort seq   = 1;
                private        ushort myseq = 1;
                
                /// <summary>
                /// Constructor
                /// </summary>
                ///<param name="dbparams">Connection parameters</param>
                public DBConnectionHandler(String [] dbparams)
                {
                        String hostname = "";
                        this.dbparams = dbparams;
                        connectionString = "Server=" + dbparams [0]
                                + "; Port=" + dbparams [1] +
                                "; Database=" + dbparams [2]
                                + "; User ID=" + dbparams [3] +
                                "; Password=" + dbparams [4] +
                                "; Encoding=UNICODE; Sslmode=Prefer; SSL=True";

                            this.dbHostName = dbparams [0] + ":" + dbparams [1];
                                this.dbInstanceName = dbparams [2];
                                this.userName = dbparams [3];
                        
                        try {
                                conn = new NpgsqlConnection (connectionString);
                                hostname = 
Environment.GetEnvironmentVariable("HOSTNAME");
                                if (hostname == null) hostname = 
Environment.GetEnvironmentVariable("COMPUTERNAME");
                                
                                hostname = hostname.ToLower();
                                conn.Open();
                                
                                IDbCommand workstationCommand = 
conn.CreateCommand();
                                workstationCommand.CommandText =
                                        "select workstation_id from 
workstations where lower (hostname) = \'"
                                        + hostname + "\' and not_in_use = 
false;";
                                IDataReader reader = 
workstationCommand.ExecuteReader();
                                reader.Read();                          
                                workstationID = (Int16) reader 
["workstation_id"];
                                reader.Close();
                                workstationCommand.Dispose();

                                this.status = 2;
                                
                                IDbCommand userCommand = conn.CreateCommand();
                                userCommand.CommandText =
                                        "select person_id, fk_department_id, 
now() as login_date, " + 
                                        "substring(version() for (position (',' 
in version())) - 1) as 
db_version"
                                        + " from employees where username = \'"
                                        + dbparams [3] + "\' and is_inactive = 
false;";
                                reader = userCommand.ExecuteReader();
                                reader.Read();                          
                                personID = (Int32) reader ["person_id"];
                                departmentID = (Int16) reader 
["fk_department_id"];
                                loginDate = (DateTime) reader ["login_date"];
                                dbVersion = (String) reader ["db_version"];
                                reader.Close();
                                userCommand.Dispose();
                                
                                this.status = 1;
                                myseq = seq;
                                seq++;
                        }
                        catch (NpgsqlException ex) {
                                this.status = -1;
                                Console.WriteLine(ex.Message);
                                Console.WriteLine(ex.StackTrace);
                        }
                        
                        /* If your client has not been registered in the 
"workstations" table, THIS 
will happen. */
                        catch (InvalidOperationException ex) {
                                String messageString;
                                if (status == 2) {
                                        messageString = "Sie als Benutzer »" + 
dbparams [3] + "« sind nicht für 
den Zugriff auf iWAWI freigeschaltet.\n"
                                        + "Bitte wenden Sie sich an Ihren 
Systemadministrator.";
                                }
                                else {
                                        messageString = "Ihr PC »" + hostname + 
"« ist nicht für den Zugriff auf 
iWAWI freigeschaltet.\n"
                                        + "Bitte wenden Sie sich an Ihren 
Systemadministrator.";
                                }

                                this.status = -1;
                                Console.WriteLine(messageString);
                        }
                }
                
                /// <summary>
                /// Returns a ready-to-use database command object.
                /// </summary>
                /// <returns>
                /// A <see cref="IDbCommand"/>
                /// </returns>
                public IDbCommand CreateCommand ()
                {
                        return this.conn.CreateCommand();
                }
                
                /// <summary>
                /// Creates a data adapter object containing the SQL statement 
given.
                /// </summary>
                /// <param name="commandText">
                /// The SQL statement <see cref="System.String"/>.
                /// </param>
                /// <returns>
                /// The ready-to-use <see cref="IDataAdapter"/>.
                /// </returns>
                public IDataAdapter CreateDataAdapter (string commandText)
                {
                        return new NpgsqlDataAdapter(commandText, 
(NpgsqlConnection) this.conn);
                }
        }
}

This class, BTW, is set right after the PrintReceipt constructor has been 
called.

> Marking a class as [Serializable] and inheriting from MarshalByRefObject
> at the same time is usually a sign that you've got remoting wrong.
> 
I must admit that I got the skeleton of my class from some tutorial long time 
ago. But when I remove [Serializable], the PrintReceipt objects isn't created 
at all. And I suppose to know why: Right before the end of the code I define a 
callback event, so that PrintReceipt can call his "master" once it's ready.

> A class is either a MarshalByRefObject and it does not
> leave its AppDomain or [Serializable] which means that
> it will leave the AppDomain in its serialization form.
> 
The intention is that PrintReceipt will "live" on a remote server (it's a 
SingleCall object), and the client just requests its creation.

Kind regards
Jacek Rużyczka

----------------------------------------------------------------------
Wakacyjna przygoda czeka! Zgarnij nagrody za 18 000zl!
Sprawdz >>> http://linkint.pl/f2721

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to