|
For all, this is a question on the best/most elegant way to do this.
I am reading records from a database. I start the read with a database
reader.ExecuteReader() method. Then I put a while Reader.read() statement to start the loop. While within this loop, I have to add up figures for certain records (store numbers). For this I use another while loop (while store number == store number). Within this while loop, I advance the records read with another reader.read() method.
The problem with this is that when it reaches the last record, the test for store number is not valid because the next record is null.
I called over my colleague to help me out with this problem, and he suggested a break on an if (!dbreader.read()). I thought this was a dirty way to get our of this, but it works!
I know I have not supplied code, but I hope you all can see it the way I explained it (this code is on a virtual machine that I do not have remote access to at the moment), But if needed I will provide.
The end question is, is it ok to use break? How often is it really used? I have always been taught not to use break/goto/gosub in C# and I just thought I would get some input here.
Thanx in advance!
Jude
|
|
|
|
|
Why Repost ?
Abhijit Jana | Codeproject MVP
Web Site : abhijitjana.net
Don't forget to click "Good Answer" on the post(s) that helped you.
|
|
|
|
|
break is the usual way to exit a while loop prematurely, what is inelegant about it ? The only thing that you should try to avoid is goto and there is no gosub in C#.
|
|
|
|
|
Shameel wrote: break is the only way to exit a while loop prematurely
really? what about goto label , return , throw new Exception(...) , Application.Exit() and then some?
Luc Pattyn [Forum Guidelines] [My Articles]
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
|
|
|
|
|
Yes, I am aware of them, but:
goto should be avoided as it leads to some hard to debug code paths.
return takes you out of the method itself, what if you want to do something after the while loop ?
throw should be used to signal an abnormal state and not to transfer control
And you know what the problem is with Application.Exit() , the whole process is brought down and you're thrown out of your app.
I did not want to confuse the OP with all these, he/she was asking for a simple method to prematurely exit a while loop.
|
|
|
|
|
Shameel wrote: I did not want to confuse the OP
then don't issue a statement that is completely wrong.
Luc Pattyn [Forum Guidelines] [My Articles]
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
|
|
|
|
|
You are probably correct, I have rephrased my answer. Thanks for pointing it out
|
|
|
|
|
I don't quite understand your double while loop scenerio, but regardless, as far as I'm concerned, break is a Goto and they both should be burned at the stake.
Why not set a flag and include it in your while conditional? I find it much easier to follow code that tells you outright what the conditions are for continuing the loop:
salesTotalLoopFinished=false;
while (!salesTotalLoopFinished && dbreader.read())
Perhaps a better route to take, though, is to let the db handle the calculation for you:
SELECT SUM(daily_sales) AS total_sales FROM storedata WHERE storeid=25
Then you can avoid all of this looping in the first place.
Cheers,
Drew.
|
|
|
|
|
For all, this is a question on the best/most elegant way to do this.
I am reading records from a database. I start the read with a database reader.ExecuteReader() method. Then I put a while Reader.read() statement to start the loop. While within this loop, I have to add up figures for certain records (store numbers). For this I use another while loop (while store number == store number). Within this while loop, I advance the records read with another reader.read() method.
The problem with this is that when it reaches the last record, the test for store number is not valid because the next record is null.
I called over my colleague to help me out with this problem, and he suggested a break on an if (!dbreader.read()). I thought this was a dirty way to get our of this, but it works!
I know I have not supplied code, but I hope you all can see it the way I explained it (this code is on a virtual machine that I do not have remote access to at the moment), But if needed I will provide.
The end question is, is it ok to use break? How often is it really used? I have always been taught not to use break/goto/gosub in C# and I just thought I would get some input here.
Thanx in advance!
Jude
|
|
|
|
|
the usual skeleton is:
using (SqlDataReader dbreader = reader.ExecuteReader())
{
// all your code here
while (dbreader.Read())
{
// use break wherever you want
}
} // at this point, dbreader will be disposed properly
Best regards,
Jaime.
|
|
|
|
|
BTW, you have a repeated question, maybe you can delete it.
Best regards,
Jaime.
|
|
|
|
|
Thanx for the answer....I didn't repost, but I see it.
When I try to access ir I receive this error:
XML Parsing Error: not well-formed
Location: http:
Line Number 63, Column 34:if (typeof(_gat) != "undefined" && _gat)
Jude
|
|
|
|
|
I was wondering if their are some apis i can call for zooming in on the desktop like the windows 7 program called Magnifier does?
|
|
|
|
|
As far as I know, Magnifier is an old tool. At least it is present since Windows XP.
Programs -> Accessories -> Accesibility -> Magnifier
Best regards,
Jaime.
|
|
|
|
|
|
Ya i think your right :P
Anyways i think i found what i was looking for: http://msdn.microsoft.com/en-us/library/ms692402(VS.85).aspx
|
|
|
|
|
Hello, i want to use the webbrowser control without hosting it in a Form how can i do that (if it's possible). I need to do that because i need to parse the generated html document and be able to work with javascript . Any help will be appreciated , thanks.
|
|
|
|
|
AFAIK you can have a WebBrowser navigate without being visible anywhere, and then you can access the document using the DocumentText property. Alternatively, you could forego the WebBrowser and just use HttpRequest/HttpResponse classes.
Luc Pattyn [Forum Guidelines] [My Articles]
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
|
|
|
|
|
Yes , true , but no events are fired and .Document property is always null. that means that the webbrwoser needs to be run in some other way that i don't know.
|
|
|
|
|
so you are doing something wrong.
You do know Navigate() is an asynchronous call, the document is available only after the DocumentCompleted event has fired?
Luc Pattyn [Forum Guidelines] [My Articles]
I only read code that is properly indented, and rendered in a non-proportional font; hint: use PRE tags in forum messages
|
|
|
|
|
What is stopping you from using WebBrowser control without dragging it onto a form ?
You can always do something like:
void DoStuff() {
WebBrowser wb = new WebBrowser();
wb.Navigate(".......");
}
|
|
|
|
|
well , it doesn't work this way because the method Navigate is asynchronous and i need to have events fired like DocumentCompleted and others. I noticed that no events are fired when i don't host the WebBrowser control in a form .
|
|
|
|
|
It is because you have not subscribed to those events. Declare the WebBrowser control at the class level and subscribe to its events.
class MyClass {
WebBrowser webBrowser1 = new WebBrowser();
MyClass() {
webBrowser1.DocumentCompleted += EventHandler(...);
}
}
|
|
|
|
|
You also need to realize that a Form is nothing but a class (System.Windows.Forms.Form). When you put your control on a Form, the VS designer writes so much boilerplate code for you. When you don't use a form to host your controls, you need to write that code yourself.
The easiest way to learn is to put your control on a form, set its properties, create event handlers and investigate the code it creates for you. Specifically look at the designer generated code in the Form1.designer.cs (or so) file.
|
|
|
|
|
What II have is a small server that I been playing a round with. It's just that I can connect to it and that's about it. I been trying to do is get it so I can log and go to a menu and well doesn't look like I can get my answer from some of the other places.
So I thought I would try here. Can some one please help me set this up.
the code is below.
<br />
<br />
static void Main(string[] args)<br />
{<br />
int recv;<br />
byte[] data = new byte[1024];<br />
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 1605);<br />
<br />
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br />
<br />
newsock.Bind(ipep);<br />
newsock.Listen(10);<br />
Console.WriteLine("Waiting for a client...");<br />
Socket client = newsock.Accept();<br />
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;<br />
Console.WriteLine("Connected with {0} at port {1}", clientep.Address, clientep.Port);<br />
<br />
<br />
string welcome = "Welcome to my TCP server (© 2008)";<br />
data = Encoding.ASCII.GetBytes(welcome);<br />
client.Send(data, data.Length, SocketFlags.None);<br />
<br />
<br />
<br />
do<br />
{<br />
string menu = "L)ogin Q)uit V)iew Log";<br />
data = Encoding.ASCII.GetBytes(menu);<br />
client.Send(data, data.Length, SocketFlags.None);<br />
<br />
string choice = "Command : ";<br />
data = Encoding.ASCII.GetBytes(choice);<br />
client.Send(data, data.Length, SocketFlags.None);<br />
<br />
switch (choice.ToUpper())<br />
{<br />
case "Q":<br />
<br />
break;<br />
case "L":<br />
Login();<br />
break;<br />
case "V":<br />
break;<br />
<br />
default:<br />
string NotThere = "Wrong Choice";<br />
data = Encoding.ASCII.GetBytes(NotThere);<br />
client.Send(data, data.Length, SocketFlags.None);<br />
break;<br />
<br />
}<br />
<br />
} while (choice != "Q");<br />
<br />
<br />
<br />
while (true)<br />
{<br />
data = new byte[1024];<br />
recv = client.Receive(data);<br />
if (recv == 0)<br />
break;<br />
<br />
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));<br />
client.Send(data, recv, SocketFlags.None);<br />
}<br />
Console.WriteLine("Disconnected from {0}", clientep.Address);<br />
client.Close();<br />
newsock.Close();<br />
}<br />
<br />
public static void MainMenu()<br />
{<br />
<br />
}<br />
<br />
public static void Login()<br />
{<br />
<br />
}<br />
<br />
}<br />
|
|
|
|