[Mono-list] Npgsql.dll

Carl Olsen carl at carl-olsen.com
Wed Jun 8 20:21:07 EDT 2005


Hi Chris,

Thanks for the example.  I've downloaded a bunch of stuff from various web
sites, including the Npgsql manual, so I'll be doing some reading this
weekend.

I'm not having any trouble with making a direct connection from a page.  I'm
just trying the abstract the database connections, and I really can't say
I'm having any problems yet.  I just haven't finished writing all the code.
I'll get back to you once I start getting some actual error messages.

Carl

-----Original Message-----
From: mono-list-bounces at lists.ximian.com
[mailto:mono-list-bounces at lists.ximian.com] On Behalf Of Chris Aitken
Sent: Wednesday, June 08, 2005 7:05 AM
To: carl at carl-olsen.com
Cc: mono-list at lists.ximian.com
Subject: RE: [Mono-list] Npgsql.dll

> How about some examples of inserts and updates using 
> parameters?  I think I'm using strings, integers, and 
> booleans, and byte[]s for parameters.

Inserting and updating is pretty simple.

Once you have written your sproc, you call it as:

SELECT update_sproc("string",int,"bool","byte[]s")

An app I wrote had:

Public static void Update ()
{
	OpenCon();

	string strSQL;
	int result;

	strSQL = SELECT update_squash(" + "" + playername + "" + "," +
playedtoday + "," + wontoday + ")";

	NpgsqlCommand UpdateCmd = new NpgsqlCommand(strSQL,connSquash);

	result = (int)UpdateCmd.ExecuteScalar();

	if (result ==1)
		Console.Writeline("Update Successful");
	else
		Console.Writeline("Oops!");

	CloseCon();
}

The sproc update_squash tool a players name(string), their games played that
day (int), and their games won that day (int). The sproc returned a 1 for
success, or a 0 for a FUBAR. I'll try to dig out the actual pl/PgSQL if
possible.




> Also, and example of NpgsqlCommand, such as would be used to 
> call a stored procedure?

Hopefully the above is a good enough example of how to call the command?
I'll email you the entire C# file if you wish, for the above example?

> Like:
> 
> 		public User(string newConnectionString):
> base(newConnectionString)
> 		{	}
> 
> 		public int Create(string emailAddress,
> 			byte[] password,
> 			string firstName,
> 			string lastName,
> 			string address1,
> 			string address2,
> 			string city,
> 			string state,
> 			string zipCode,
> 			string homePhone,
> 			string country)
> 		{
> 			int rowsAffected;
> 			SqlParameter[] 
> 				parameters = {
> 								 new
> SqlParameter("@EmailAddress", SqlDbType.VarChar, 255),
> 								 new
> SqlParameter("@Password", SqlDbType.Binary, 20),
> 								 new
> SqlParameter("@FirstName", SqlDbType.VarChar, 30),
> 								 new
> SqlParameter("@LastName", SqlDbType.VarChar, 50),
> 								 new
> SqlParameter("@Address1", SqlDbType.VarChar, 80),
> 								 new
> SqlParameter("@Address2", SqlDbType.VarChar, 80),
> 								 new
> SqlParameter("@City", SqlDbType.VarChar, 40),
> 								 new
> SqlParameter("@State", SqlDbType.VarChar, 2),
> 
> 								 new
> SqlParameter("@ZipCode", SqlDbType.VarChar, 10),
> 								 new
> SqlParameter("@HomePhone", SqlDbType.VarChar, 14),
> 								 new
> SqlParameter("@Country", SqlDbType.VarChar, 50),
> 								 new
> SqlParameter("@UserID", SqlDbType.Int, 4)
> 							 };
> 
> 			parameters[0].Value = emailAddress;
> 			parameters[1].Value = password;
> 			parameters[2].Value = firstName;
> 			parameters[3].Value = lastName;
> 			parameters[4].Value = address1;
> 			parameters[5].Value = address2;
> 			parameters[6].Value = city;
> 			parameters[7].Value = state;
> 			parameters[8].Value = zipCode;
> 			parameters[9].Value = homePhone;
> 			parameters[10].Value = country;
> 			parameters[11].Direction =
> ParameterDirection.Output;
> 	
> 			try 
> 			{
> 				RunProcedure("sp_Accounts_CreateUser",
> parameters, out rowsAffected);
> 			}
> 			catch ( SqlException e )
> 			{
> 				// 2601 is the number returned 
> when the primary key
> 				// is violated. We know if 
> we're violating the primary
> 				// key that the e-mail address 
> is already on file.
> 				// Its cheaper than actually 
> searching for that address before
> 				// inserting.
> 				if (e.Number == 2601) 
> 				{
> 					return
> (int)CarlsWebs.WebModules.Accounts.ProcResultCodes.AccountAlre
> adyOnFile;
> 				}
> 				else 
> 				{
> 					throw new AppException("An error
> occurred while executing the Accounts_CreateUser stored procedure",
> 						e );
> 				}
> 			}
> 
> 			return (int)parameters[11].Value;
> 		}

Chris


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

_______________________________________________
Mono-list maillist  -  Mono-list at lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-list





More information about the Mono-list mailing list