|
Thanks for the link, but I've tried that one already with no luck.
|
|
|
|
|
I need to create pdf files from html files. I have searched it but i couldn't find a real solution.
I used Winnovative but it uses ads. The library must also transfrom html tables.
Are there open source libraries for converting files ?
|
|
|
|
|
|
|
I have used Itextsharp. It doesnt work good when table doesnt fit the page. It can not divide correctly. Also it makes whole widths the same.
|
|
|
|
|
Hello everyone,
I have a problem with one application which should run permanently to transfer some output from a serial port to a database. This application crashes about every 17 hours once which should not happen because of loosing data when the application is not running.
I located the error in this code:
if (tmp.Length > 0) {<br />
while (_conn.State != ConnectionState.Open) {<br />
_conn.Open();<br />
Thread.Sleep(100);<br />
}<br />
cmd.Connection = _conn;<br />
cmd.ExecuteNonQuery();<br />
}
* tmp is a string which contains the edited output of the serial port.
* _conn is an MySQL-Connection made through the MySQL-.NET-Connector 5.0
* cmd is a simple INSERT-Command (MySQLCommand)
So in this context i got the following error:
<br />
exception.source == mscorlib<br />
<br />
exception.message == Non-negative number required.\nParameter name: count<br />
My problem is: I cant see any parameter named count where the exception can happen. Might it be that the MySQL-Connector itself causes that exception? If this is the reason i'll try to rewrite the code for an ODBC-Connection.
I hope i provided all needed information to pass a hint to me.
With best regards,
K. Ahlers
|
|
|
|
|
You haven't posted the query that you are executing towards the DB
anyway try to set on nocount in the query string
Just
Set NOCOUNT ON
and at the end
SET NOCOUNT OFF
maybe it will help
I am not sure
by the way you can use a
DB profiler to check whether your problem emerges from the DB layer
|
|
|
|
|
My query is as I said a simple insert:
string now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");<br />
MySqlCommand cmd = new MySqlCommand("INSERT INTO log (datelogged, logentry) VALUES ('" + now + "', '" + tmp + "')");
tmp is here equal to the tmp in my first posting a string from the serial output.
The table is a InnoDB table with the fields id(INT), datelogged(DATETIME), logentry(VARCHAR(200)
With best regards,
K. Ahlers
|
|
|
|
|
Hi,
"parameter named count" refers to a method that has count in it's documentation
(actually its reflected parm list); it does not refer to one of your app's
variables named count. Yhere are many candidates including:
public int SerialPort.Read (
byte[] buffer,
int offset,
int count
)
some suggestions:
- look at the entire exception, that is use exception.ToString(), it will
show all available information including line numbers, message details, and
inner exceptions if any
- have Visual show line numbers (see my sig)
- put a try-catch and have it show all relevant variables when it catches this
or some other exception, including cmd, tmp, ...
and ideas:
- a 16-bit number counting seconds would overflow after 18.2 hours
- you might have a memory leak (or a disk full; logging?) resulting in a
systematic failure; if exceptions are not handled correctly, that might
result in just about any symptom
final comment:
if all the above dont help, show us all available info and some complete methods.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Okay. I added the .ToString() but we have to wait for the next crash to execute...
With best regards,
K. Ahlers
|
|
|
|
|
[quote]make Visual display line numbers: Tools/Options/TextEditor/..[/quote]
Thanks for that... i gave up looking last time I tried.
ps. Another quality response. Out of interest, where are you from Luc?
|
|
|
|
|
Hi,
J4amieC wrote: make Visual display line numbers: Tools/Options/TextEditor/...
it is a shame Microsoft did not turn that on by default; posters ignore line numnbers
in exceptions since they don't show in source files anyway, making them look for
problems everywhere except where they really are.
J4amieC wrote: where are you from
Belgium, a little south of where you are See profile page.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Okay NOW i have a complete error-message:
System.ArgumentOutOfRangeException: Non-negative number required.<br />
Parameter name: count<br />
at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)<br />
at MySql.Data.MySqlClient.MySqlStream.Read(Byte[] buffer, Int32 offset, Int32 count)<br />
at MySql.Data.MySqlClient.MySqlStream.ReadString(Int64 length)<br />
at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData41()<br />
at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData()<br />
at MySql.Data.MySqlClient.NativeDriver.ReadColumnMetadata(Int32 count)<br />
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()<br />
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)<br />
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()<br />
at Cisco2Mysql.Form1.serialPort1_DataReceived(Object sender, SerialDataReceivedEventArgs e)<br />
So it seems to be really a buggy .NET-Connector or can anyone there a mistake by me?
With best regards,
K. Ahlers
|
|
|
|
|
OK, seems the problem is in your serialPort1_DataReceived method.
Will you find it yourself, or do you plan on showing us the entire method's source code ?
For some reason, we did not get line numbers. Is this release code ?
And this seemed like an 9-hour run, not a 17-hour one ?
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Good morning Luc,
here is the complete method:
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) {<br />
try {<br />
_buffer += serialPort1.ReadExisting();<br />
<br />
int posofbreak = _buffer.IndexOf('\n');<br />
if (posofbreak > -1) {<br />
string tmp = _buffer.Substring(0, posofbreak).Trim();<br />
<br />
if (posofbreak < _buffer.Length - 1)<br />
_buffer = _buffer.Substring(posofbreak + 1);<br />
<br />
while (tmp.IndexOf('>') > -1)<br />
tmp = tmp.Substring(tmp.IndexOf('>') + 1).Trim();<br />
<br />
string now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");<br />
<br />
MySqlCommand cmd = new MySqlCommand("INSERT INTO cisco_log (datelogged, logentry) VALUES ('" + now + "', '" + tmp + "')");<br />
<br />
if(box.Text.Length > 5000) <br />
box.Text = box.Text.Substring(0, 5000);<br />
<br />
box.Text = tmp + "\r\n" + box.Text;<br />
<br />
if (tmp.Contains("L11 0")) {<br />
serialPort1.WriteLine("CD EWE");<br />
serialPort1.WriteLine("DISCO 2");<br />
LogWrite("Call detected, disconnecting second line.");<br />
}<br />
<br />
if (tmp.Contains("L67 2")) {<br />
Thread.Sleep(2000);<br />
serialPort1.WriteLine("CD EWE");<br />
serialPort1.WriteLine("CALL 2");<br />
LogWrite("Line Integrity Violation detected, reconnecting second line.");<br />
}<br />
<br />
if (tmp.Length > 0) {<br />
while (_conn.State != ConnectionState.Open) {<br />
_conn.Open();<br />
Thread.Sleep(100);<br />
}<br />
cmd.Connection = _conn;<br />
cmd.ExecuteNonQuery();<br />
}<br />
<br />
}<br />
<br />
buff.Text = _buffer;<br />
}<br />
catch (Exception ex) {<br />
LogWrite("Exception at serialPort1_DataReceived: "+ex.ToString());<br />
}<br />
}
After the "MARKER" the exception is thrown. (Yes it is a release-binary)
With best regards,
K. Ahlers
|
|
|
|
|
Hi,
I looked at your code and have some comments:
1.
you did not follow my advice "put a try-catch and have it show all relevant variables
when it catches this or some other exception, including cmd, tmp, ..."
2.
I don't see why you have the test in
if(posofbreak < _buffer.Length - 1) _buffer = _buffer.Substring(posofbreak + 1);
With it, if _buffer contains just one line ending on \n, that line remains in
_buffer and will be processed again next time DataReceived fires.
3.
while(tmp.IndexOf('>') > -1) tmp = tmp.Substring(tmp.IndexOf('>') + 1).Trim();
could have been handled more elegantly with ListIndexOf
4.
I am not sure the Thread.Sleeps, especially the one with 2000, are a good idea
inside DataReceived; they make your code not react for 2 seconds on the next
data; if for some reason "L67 2\n" comes in every second, you will never
catch up.
5.
I don't know what value serialport1.ReceivedBytesThreshold has; if it is
much larger than 1, chances are you receive more than one line of text every
time, but you only process one line at a time.
Actually, there should have been a while loop: as long as entire lines are
available, process it.
6.
if buffer contains only one line of the form
sometext > \n
then tmp will be an empty string; not sure SQL will like that
I strongly suggest you follow my advice (see 1); I don't understand how you
did not do this from the beginning: when something goes wrong, the more information
you have about it, the easier it is to pinpoint the problem...
Hope this helps.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
1) How can I do that? In the try-catch these variables are not longer availiable. How to access them without declaring them global? Or did you mean to define a try-catch inside my existing try-catch?
2) Solved.
4) It must sleep about 2 seconds because the router have to clean up the line before reconnecting. This error can appear only if the line is connected - so not multiple times before reconnecting.
5) Solved.
6) If tmp.lenght is not greater than 0 the SQL-Command will not be executed.
With best regards,
K. Ahlers
|
|
|
|
|
Hi
1.
declare and initialize the var before the try statement (or as a class
member, see _buffer)
6.
sorry, my mistake
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Okay - This time it took really long to the next crash.
So I cant find any timing in there.
Here is the debug-output:
<br />
Content of tmp: """Connection 2 Add Link 2 Channel 2"""<br />
MySQL-Command: """INSERT INTO cisco_log (datelogged, logentry) VALUES ('2007-08-17 11:47:38', 'Connection 2 Add Link 2 Channel 2')"""<br />
Buffer-Content: """CISCO:EWE> """<br />
PosOfBreak: 50<br />
<br />
Exception: System.ArgumentOutOfRangeException: Non-negative number required.<br />
Parameter name: count<br />
at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count)<br />
at MySql.Data.MySqlClient.MySqlStream.Read(Byte[] buffer, Int32 offset, Int32 count)<br />
at MySql.Data.MySqlClient.MySqlStream.ReadString(Int64 length)<br />
at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData41()<br />
at MySql.Data.MySqlClient.NativeDriver.GetFieldMetaData()<br />
at MySql.Data.MySqlClient.NativeDriver.ReadColumnMetadata(Int32 count)<br />
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()<br />
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)<br />
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()<br />
at Cisco2Mysql.Form1.serialPort1_DataReceived(Object sender, SerialDataReceivedEventArgs e)<br />
The only constant in there is the exception. Every time it's raised by the ExecuteNonQuery()-method.
I do not have any idea why this happens - so if you can help me it would be fine. If you don't have any idea too i'll have to try the ODBC-connector. Might be that it will not crash with this error...
With best regards,
K. Ahlers
|
|
|
|
|
Hi,
as long as your SQL statement looks good, we must assume a bug in MySQL.
which version are you running ?
I have googled a bit and found:
1.
there has been a bug #7345 which got fixed in Version 1.0.4 1-20-05
according to this[^]
2.
there has been/still is a bug giving same message when querying with two
result sets. If that could apply, go and look deeper for that.
I trust you don't have extra threads that also do SQL stuff at the same time?
If your version is recent I would suggest you post this problem to the MySQL
site.
Good luck, and keep us posted.
Luc Pattyn [Forum Guidelines] [My Articles]
this weeks tips:
- make Visual display line numbers: Tools/Options/TextEditor/...
- show exceptions with ToString() to see all information
- before you ask a question here, search CodeProject, then Google
|
|
|
|
|
Hi guys,
I need to print a file (maybe a .doc or 'jpg or whatever), which is identical in functionality to what we do by right clicking the document and giving the print command in the windows explorer.
Is there any way which I can give the document path through the programme and print it irrespective of the exact type (if it is printable)?
I can have the functionality through any event. But, I want to know how to implement the print function once the path is given.
Regards,
A
|
|
|
|
|
I think you should use Process and ProcessStartInfo classes to accomplish this. Use verb property of ProcessStartInfo to specify print command
|
|
|
|
|
Here is the code from There is always the way to do it, but I don't know one of the members
I used it and it worked well
private static void doPrint(string executable, string fileFullPath, string printerName)
{
System.Diagnostics.ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.Arguments = "/h /t \"" + fileFullPath + "\" \"" + printerName + "\"";
startInfo.FileName = executable;
startInfo.UseShellExecute = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
System.Diagnostics .Process process = new Process() ;
try {
process = Process.Start(startInfo);
}
catch (Exception ex)
{
}
finally
{
process.WaitForExit(20000);
if (process.HasExited == false)
{
process.Kill();
}
}
}
good luck
|
|
|
|
|
nice. you got 5 from me.
Hessam Jalali wrote: There is always the way to do it, but I don't know
haha. cool name..
Thanks and Regards,
Michael Sync ( Blog: http://michaelsync.net)
If you want to thank me for my help, please vote my message by clicking one of numbers beside "Rate this message". Why vote? Plz Read it here. Thank you.
|
|
|
|
|
Do you have any ideas on going further than this get the print job to print legal size. I have a varation of this code and I have tried setting the paper source and paper size to be the correct tray and paper kind but Adobe Reader appears to override and still print on letter size all of the time.
GG
|
|
|
|