|
|
Hi Luc,
Got it working but wanted to say thank you for your help (code is in my reply to PIEBALDconsult).
Would welcome your thoughts and comments...
|
|
|
|
|
Your calculation is wrong.
Quote: stime += (Environment.TickCount / 120000 % 60);
Can you see it now?
Alan.
|
|
|
|
|
Yup, saw it - thanks for pointing it out.
Got it working, code is in my reply to PIEBALDconsult.
Wanted to say a quick thanks for your help.
modified 20-Mar-12 8:33am.
|
|
|
|
|
Good Morning,
I am trying to extract a column of data from an Excel spreadsheet and pass it to a list box. I thought this was straight forward and I have found several very similar code samples through Google and Code Project search, but I cannot get any to work. I have created several variations of each with my own syntax (which is usually simpler) but I keep getting this error:
ERROR: "The Microsoft Jet database engine cannot open the file ''. It is already opened exclusively by another user, or you need permission to view its data."
I have tried adding a piece of code that I found to make sure the process is not running (just guessing here...see Sample 1), but I do not think that it works either. Below are 2 different code snippets that produce the same error. I would appreciate it these can be corrected of if a new code sample can be demonstrated to cure this issue ot produce the desired result.
Sample 1
private DataTable GetExcel(string fileName, string sheetName)
{
DataTable dt = new DataTable(sheetName);
try
{
string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";", fileName);
string Sql = "SELECT * FROM [" + sheetName + "$]";
OleDbConnection Conn = new OleDbConnection(ConStr);
OleDbCommand Comm = new OleDbCommand(Sql, Conn);
OleDbDataAdapter da = new OleDbDataAdapter(Comm);
Process[] process;
process = System.Diagnostics.Process.GetProcessesByName("Excel");
if (process.Length > 0)
{
process[0].Kill();
}
Conn.Open();
da.Fill(dt);
Conn.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
return dt;
}
Sample 2
private void GetExcelInfo()
{
string theFile = textBoxExcelFile.Text;
string ConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + theFile + ";Extended Properties=Excel 8.0";
string sheetName = "Sheet1";
OleDbConnection Conn = new OleDbConnection(ConStr);
try
{
Conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheetName + "$]", Conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
Conn.Close();
}
}
Thank you of your help...Pat
|
|
|
|
|
Do you have the file open in Excel?
|
|
|
|
|
No. The app uses the openFileDialog to create the path and put it in a textbox so I can transfer it to the connection string. It looks like so:
C:\Users\Pat\Documents\Visual Studio 2010\Projects\Perfect 2012\Perfect 2012\bin\Debug\Filename.xls
Also, I ran the following code to determine all the running processes at the time of the call:
ArrayList allProcesses = new ArrayList();
foreach(Process p in processlist)
{
allProcesses.Add(p);
}
No Excel processes were revealed. I am baffled. Thanks for your question...Pat
|
|
|
|
|
How about the SPACEs in the path?
|
|
|
|
|
Is you're project being targeting "AnyCPU" and is your version of Windows 64-bit?? If so, then you can't use the Jet 4.0 provider. It's a 32-bit only piece of code and you can't mix 32- and 6-4bit code in the same process.
Try setting your compile options to target x86 only.
|
|
|
|
|
Thank you Dave,
This is a 32 bit system and I am already configured for x86. I appreciate your reply. Let me know if anything else comes to mind or if you see a problem in the code...Best, Pat
|
|
|
|
|
Try removing the conn.Open(); line. When a data adapter fills, it open the associated connection, fills the DataSet, then closes the associated connection automatically. <-- Edit: nevermind, just tried your code and it works fine. You must have something holding onto that file (or permissions, password, etc.) that prevents it from opening.
Jack of all trades ~ Master of none.
modified 19-Mar-12 19:42pm.
|
|
|
|
|
Hello..Thank you for your input. I agree about the connection, but this was a copied (supposedly already working code), so I left it. I removed the connection commands as suggested, but the result is the same. Let me now if you have any other thoughts...Best, Pat
OK, I just saw the edit...hmmm, what can I say. I'll keep looking, perhaps try a reboot. If I find the answer, I will post it. If not, I'll have to try a different way to get to the intended result....P.
|
|
|
|
|
The app doesn't create any Streams that use the file does it?
Jack of all trades ~ Master of none.
|
|
|
|
|
OOOOKKKK..........JOAT-MON
YES...you are absolutely right. There was a Streamwriter object that was called when the file was imported. I normally enclose them in a using statement so that they will close automatically, but for some reason I did not do it this time. I have made the correction and it is working perfectly now. Thank you very much for your insight. I am marking your answer as THE answer. Kudows and Best Regards, Pat
|
|
|
|
|
Good deal! I'm glad you found it and got it working.
Jack of all trades ~ Master of none.
|
|
|
|
|
hey guys. plz help me.i want to validate the no(port no)in text box . i m using the following regex to validate...i just want 0123456788( only numbers) to be entered in the text box..
Regex regex = new Regex(@"^[-+]?[0-9]*\.?[0-9]+$");
Thanks in Advance
|
|
|
|
|
1: there's a regex forum
2: this is trivial: \d* (or \d+ if you want to force at least one), are you sure you understand regex? The one you pasted looks like a floating point validator.
3: if you just use a numeric text box (you may have to write one which validates on text change and rejects some key presses) or a NumericUpDown then you don't need a regex validation string anyway
|
|
|
|
|
Regex is, IMHO, not indicated here, at all.
You could write an event handler for the OnKeyDown event to filter other keys than numeric ones.
But validation would better be something like :
private void TextBox_Validating(object sender, CancelEventArgs e)
{
ushort port;
if (!ushort.TryParse(yourTextBox.Text, out port))
e.Cancel = true;
}
No memory stick has been harmed during establishment of this signature.
|
|
|
|
|
|
A "port" number in standard computer nomenclature has a specific range as well.
|
|
|
|
|
Use NumericUpDown control or alternatively a MaskedTextbox.
V.
|
|
|
|
|
I have written a C#.Net application to convert any image into png image. I have basically used the call
Image.Save(outputFilename, ImageFormat.Png);
I get the proper png file compressed to smaller size and working fine.
But my customer wants the application to allow users to modify/vary the sliding window size(deflate ratio) of the compressed png image. So I want to know if whether I can actually supply the deflate ratio to the .Net Framework and the framework compresses the image to a png file with that deflate ratio(sliding window size).
Anybody can give suggestions/inputs?
|
|
|
|
|
|
hello.
i have a server client app
when client is on ,server send arraylist object for client.
for first client ,server can send arraylist for client and when second client connect,server can not send arraylist.
may code:
1 BinaryFormatter bf = new BinaryFormatter();MemoryStream ms = new MemoryStream();byte[] b;bf.Serialize(ms, listclient);b = ms.GetBuffer();
it give this error:
{"Type 'chatserver.client' in Assembly 'chatserver, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable."}
|
|
|
|
|
Mark your 'chatserver.client' class with the Serializable[^] attribute.
|
|
|
|