|
Hi Kevin,
Thanks alot for your reply, thanks to others too who took time to reply to my query.
In our part of the place, its easier to get a Wrox book rather than Apress or others, so I guess I'd get a Professional C# 2005 from Wrox and also use Internet as a resource.
But I always feel that the way we code in my company (it has a strength of 6 .NET developers) is of no good when I see code and articles posted by members of CodeProject. I would like to ask one thing, where can a person who is new to programming learn good coding standards, how can I know if the code I have written is good, how can I ensure that my piece of code doesn't waste memory.
Only thing commonly told here to improve performance of out application is to Dispose all objects we create and use more of .NET Classes. Is there any way that a person can get to know such things?
Regards,
Blumen
|
|
|
|
|
I hear you when it comes to standards. Programmers are probably the most opinionated group of people on earth I think this is because they are usually pretty bright and tend to think for themselves. The down side to this is trying to get a review without to much opinion such as coding standards.
In my humble opinion coding standards should be driven by need more than conceptual designs. My coding has changed because I truly hate producing code that I have to support or is riddled with bugs. Here is a list of stupid things I have done that do not work. Methods that are long and hold duplicate code (bad bad bad), inadequate use of constructors (initialize all member variables), a class that handles too much work (makes the program fragile) and my favorite classes that have dependencies on other classes to do their work.
I like the work from Robert Martin and Martin Fowler both of which have great web sites that provide in depth ways to solve my bad habits. I suggest that you start there then just review as much code as you can look for the why not the how in the design.
As a side note one of the things that our team has instigated is the practice of each team member presenting an OO Design principle or Pattern every year. What this will do is provide an outlet for research into the craft that we practice and creates a healthy learning environment. There is no magic book or web site you just have to dig deep and get very good at what you do and it takes time.
I would like to offer this insight however and I will paraphrase from a post I read here on CP. The languages we use are not for the benefit of the compiler they are structured the way they are for the humans. The code is written into IL in a much different format than your design. Use the OOD to make what you do better that is what it is for the processor could care less about OO so keep your eye on the prize stable maintenance free software.
Best of luck I look forward to hearing of you progress.
|
|
|
|
|
Hi Kevin,
I really appreciate your reply, it was a surprise for me that somebody would spent so much of their time to reply to my query! Thanks alot!
I am attending C# classes these days, so I hope I can learn some basics and then go towards advanced topics on my own. I would be really greatful if I can contact you vai e-mail, if you are reluctant to post your e-mail id here, I can give you mine. Its:
blumenhause@yahoo.com
If you don't mind that I contact you via e-mail, please send me your e-mail address. I look forward to hearing from you.
Regards,
Blumen
Beginner - C# 2.0
|
|
|
|
|
I've been working on a CollectionEditor, but I'm getting an obscure error message whenever I try to use the Add button. To reproduce and demonstrate this error, I've made this short piece of code:
using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Collections.ObjectModel;<br />
using System.ComponentModel.Design;<br />
using System.ComponentModel;<br />
using System.Drawing.Design;<br />
<br />
namespace Test<br />
{<br />
public abstract class BaseItem<br />
{<br />
private string _name;<br />
<br />
public string Name<br />
{<br />
get { return this._name; }<br />
set { this._name = value; }<br />
}<br />
}<br />
<br />
public class IntItem : BaseItem<br />
{<br />
private int _value;<br />
<br />
public int Value<br />
{<br />
get { return this._value; }<br />
set { this._value = value; }<br />
}<br />
}<br />
<br />
public class StringItem : BaseItem<br />
{<br />
private string _value;<br />
<br />
public string Value<br />
{<br />
get { return this._value; }<br />
set { this._value = value; }<br />
}<br />
}<br />
<br />
public class ItemCollection : Collection<BaseItem><br />
{<br />
}<br />
<br />
public class ItemCollectionEditor : CollectionEditor<br />
{<br />
public ItemCollectionEditor(Type type)<br />
: base(type)<br />
{<br />
}<br />
<br />
protected override Type[] CreateNewItemTypes()<br />
{<br />
return new Type[] { typeof(IntItem), typeof(StringItem) };<br />
}<br />
}<br />
<br />
public class ItemCollectionHostControl : System.Windows.Forms.Control<br />
{<br />
private ItemCollection _items;<br />
<br />
public ItemCollectionHostControl()<br />
{<br />
this._items = new ItemCollection();<br />
}<br />
<br />
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),<br />
Editor(typeof(ItemCollectionEditor), typeof(UITypeEditor))]<br />
public ItemCollection Items<br />
{<br />
get { return this._items; }<br />
}<br />
}<br />
}
This creates a control called ItemCollectionHostControl, which has a 'Items' property. In this, you can add two types - 'IntItem' and 'StringItem'. It doesn't happen all of the time, but sometimes I get the following error message:
"The value 'Test.IntItem' is not of type 'Test.BaseItem' and cannot be used in this generic collection"
You may be able to add some items initially, but try then compiling the project, and adding some more.
Can someone see why this error is occurring, or what I'm doing wrong? If someone could try the code and see if it happens with them, that'd be great too.
Thanks
|
|
|
|
|
Sorry to nag, but this is really driving me insane.
Can't anyone see what I'm doing wrong? 
|
|
|
|
|
Hi All,
I am trying to connect to Oracle database via C# service application. When I try to open the connection i get the exception "Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached." This happens at very first instance(not after some interval...)
I have tried to search this on the net, but all in vain. Most of them have given the answere as to check with the connection. Below is the code snippit I am using to connect to database.
string csQuery = "prc_ins_sample";
string strConnection = "User ID=xxxx;Password=xxxx;Data Source=xxxxx;";
OracleConnection OraConn = new OracleConnection();
try
{
OraConn.ConnectionString = strConnection;
HMLog.WriteEntry("OraConn.Open();");
OraConn.Open();
OracleCommand OraCmd = new OracleCommand(csQuery, OraConn);
OraCmd.CommandType = CommandType.StoredProcedure;
HMLog.WriteEntry("OraConn.Open()");
OracleParameter arg_month = new OracleParameter();
arg_month.OracleType = OracleType.Number;
arg_month.Direction = ParameterDirection.Input;
arg_month.ParameterName = "arg_month";
arg_month.Value = 10;
OraCmd.Parameters.Add(arg_month);
arg_month = new OracleParameter();
arg_month.ParameterName = "arg_mybal";
arg_month.Direction = ParameterDirection.Output;
arg_month.OracleType = OracleType.Number;
OraCmd.Parameters.Add(arg_month);
HMLog.WriteEntry("Before execution");
int iRecordCount = OraCmd.ExecuteNonQuery();
if ( iRecordCount > 0 )
{
}
OraConn.Close();
OraConn.Dispose();
}
catch(Exception ex)
{
HMLog.WriteEntry(ex.Message);
if (OraConn.State != ConnectionState.Closed ) OraConn.Close();
OraConn.Dispose();
}
Does any one know to get out of this problem.
Srinath
|
|
|
|
|
Do you have the Oracle client software installed, version 8i release 3 or better?
Depending on your Oracle installation, you might have to add the Integrated Security=no; option to your connection string.
@"Data Source=xxxxx;User ID=xxxxassword=xxxx;Integrated Security=no;";
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Thanks for the reply.
Your hint did not help me. This is a strange behaviour, If I connect to the same database from a desktop application developed in C# with the same connection string, it does executes the procedure. But the same tried from C# service application it hangs for a min and then throw this exception.
Let me know if am doing somthing wrong... I am in a pretty bad state with this exception.
Srinath
|
|
|
|
|
As a test, go into the Services manager (Start/Run Services.msc), stop your service and change the userid and password that the service runs under to your id and password. Then restart the service and see what happens.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Even this did not help me. Is there any initial setup that has to be done on my system even before accessing the database from service applications ? like user creation, giving persmissions etc..etc...?
Srinath
|
|
|
|
|
Nope. It would appear that the database code is not the same as what you've tested in the non-service version.
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|
|
Code is very much the same. I am executing that in a console application. While carrying out your previous instruction I was given the permission to execute services(Log on services). So I restarted the machine and then carried out your instruction. Now I have strong feeling that some permission has to be given to my USERID and PWD on the local machine. And the serive was installed using "LocalSystem" property.
More over I am logging to a domain. Keeping this in mind I asked you about those question. Let me know if you need more info from my side.
Srinath
|
|
|
|
|
Do i have to impersionate the user...while accessing the data base ?
Srinath
|
|
|
|
|
Could it be that (part of) your Oracle is installed "for this user only" instead of
"for all users" ?
As a test: use another user account on the same machine and try again.
Luc Pattyn
|
|
|
|
|
Your are right. If I log into machine as a local user i am not able to access the database. Another strange problem, I right click on my console application and then select "Run As" option. Here I am using loginID and PWD, which I have been using so far and working fine. But the application throws an error
OCI.DLL
The specified module could not be found.
Could not create an environment: OCIEnvCreate returned -1.
But the same application if double clicked returns the correct answere from the procedure.
Srinath
|
|
|
|
|
Googling oci.dll I found
http://www.dll-files.com/dllindex/dll-files.shtml?oci[^]
which seems to indicate the file somehow could have been installed on your machine
separate from the normal Oracle files, so all is not lost.
Search your PC for it, and move or copy it to a more appropriate location (where ever
that might be).
Luc Pattyn
|
|
|
|
|
Actually all those dlls are picked up from my env path variables.
So that seems to be ok.... But the acutal problem still exists.
Srinath
|
|
|
|
|
Just checking, is your env path the same for everyone ?
And is it set before the service gets started ?
-- modified at 18:04 Tuesday 9th January, 2007
Luc Pattyn
|
|
|
|
|
How can I code for controlling end of a database query and command? Assume I must run a messagebox when query finished certainly. How can I be sure query was finished (in code) ?
|
|
|
|
|
Do u mean to say you need to collect the time stamp ? before and after query execution ?
|
|
|
|
|
I have a class inhertied from PrintDocument in that I am trying to write in a file while am in printpage event handler. The problem is that the file gets created but there is not text/data. Is it even possible to do.
protected void ThePrintDoc_PrintPage (object sender,PrintPageEventArgs ev)
{
StreamWriter sw =new StreamWriter(new FileStream("path.txt", FileMode.Create, FileAccess.Write));
sw.Write("hello");
sw.Close();
}
|
|
|
|
|
Could be because the file doesn't get closed properly. Does the data appear after the application exits?
WM.
What about weapons of mass-construction?
"You can always try to smash it with a wrench to fix that. It might actually work" - WillemM
|
|
|
|
|
no. if i apply the same codes in a non inherited PrintDocument then i can see the file with data but if i wrote same in PrintDocument class means
(public class TextPrintDocument : PrintDocument) then i don't see
Thanks
|
|
|
|
|
Did you do the following inside your class??
public class TextDocument: PrintDocument {
public TextDocument()
:base()
{
PrintPage += new PrintPageEventHandler(ThePrintDoc_PrintPage);
}
protected void ThePrintDoc_PrintPage (object sender,PrintPageEventArgs ev)
{
StreamWriter sw =new StreamWriter(new FileStream("path.txt", FileMode.Create, FileAccess.Write));
sw.Write("hello");
sw.Close();
}
}
It could be that your method wasn't hooked up to the printpage event of the PrintDocument class, which you inherit from.
WM.
What about weapons of mass-construction?
"You can always try to smash it with a wrench to fix that. It might actually work" - WillemM
|
|
|
|
|
Try calling your StreamWriter's Flush() method before you try and read the file:
protected void ThePrintDoc_PrintPage (object sender,PrintPageEventArgs ev)
{
StreamWriter sw =new StreamWriter(new FileStream("path.txt", FileMode.Create, FileAccess.Write));
sw.Write("hello");
sw.Flush();
sw.Close();
}
Dave Kreskowiak
Microsoft MVP - Visual Basic
|
|
|
|