|
Writing a project for a client using .NET 3.5 in C#. I need to import data from an XLS spreadsheet into a SQL data table. Problem is, one of the columns in the date table contains an "optional" date field. In the sample file provided by the client, no data exists in that optional field until row 27. The result is that NO ROW contains the optional field in the final SQL table.
I've been using an ODBC connection (MS Jet 4.0) to read the XLS. I tried adding MAXSCANROWS=0, which according to what I've read should allow the first 16384 rows to be used in determining column types. However, this seemed to have no effect.
I read another article that suggested the work-around is registry editing. That's not too practical, especially for deploying this project to the client's server.
Does anyone know another way to get the data to import correctly?
Thanks.
|
|
|
|
|
I've had nightmares trying exactly this kind of thing in Excel. That and the fact that if someone has the file open ODBC doesn't revert to a readonly mode as would happen if 2 people opened an xls file in the conventional manner.
As i remember if the first populated field within a column contains an integer you then get problems if subsequent fields contain text etc.
I think i ended up using the PIA approach and reading the data out cell by cell. It's slightly more laborious but gives a much finer level of control over what is happening
Russ
|
|
|
|
|
PIA approach? Can you point me in the direction of an article that would demonstrate how to read out the data cell by cell? I would have preferred this from the start, but I have been unable to find such information.
Thanks.
|
|
|
|
|
|
Hi, I want to get rid of black arrow in rowheader of DataGridView. Any ideas?
|
|
|
|
|
Set the ShowEditingIcon property to False. I think that's what you are looking for.
|
|
|
|
|
Editing glyph IS NOT the black arrow, showing the row selected! The question is still actual. And I think the solution is to draw in row header. But what exactly? I'm sure somebody had already fixed this issue.
|
|
|
|
|
The one that indicates which row is selected? I haven't yet found a way.
And DataGridViews are for talentless hacks anyway, so I don't bother.
|
|
|
|
|
Have you another decision besides DataGridView to show information in table-style?
|
|
|
|
|
I solved the problem. As my CellPainting has already been overriden, I added such construction to clear the arrow:
using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
e.Graphics.FillRectangle(backColorBrush, e.CellBounds.X+1, e.CellBounds.Y+1, 20,40);
}
|
|
|
|
|
|
|
How to create ".eml" file using desktop application in .net to use it to send E-mail?
|
|
|
|
|
How you create a file, is up to you. What is an eml file ? I have no idea.
You need to know how to send a file via email ? There's tons of articles online that cover this.
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
Christian Graus wrote: What is an eml file ? I have no idea
Just looked it up in Thunderbird by saving an e-mail in this format. It's basically just the mail header as received from the mail server (from, to, subject, mime, content-type, return-path) and the message body.
I don't see how this can be used to send e-mail.
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Hi, i got a hashtable within a hashtable. How do i retrive the property from the inner hashtable
I got this orderTable which store a Order object.
Inside my Order object, i have a Hashtable itemList as a attributes. The itemList will store a product object which have the property ModelNumber
foreach (Order order in orderTable.Values)
{
if (order.ItemList.ContainsKey(Convert.ToString(p.ModelNumber)))
{
uint modelNum = ((Product)order.ItemList[p.ModelNumber]).ModelNumber;
string cellValue = Convert.ToString(p.ModelNumber);
if (cellValue == Convert.ToString(modelNum))
{
dataGridProduct.Rows[currentRow].Cells["colSelect"].Value = true;
}
}
}
this is what i do, but i get
Object reference not set to an instance of an object.
on this line
uint modelNum = ((Product)order.ItemList[p.ModelNumber]).ModelNumber;
|
|
|
|
|
benjamin yap wrote: order.ItemList[p.ModelNumber]
This, by definition, returns a hashtable, not a Product. That's what you said, right ? That returns a hash table, so you need to pull the value out of that hash table. I am surprised you don't get an invalid cast exception.
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
i cast a (Product) infront already and i just do a .ModelNumber
issint this pulling out the value? i tried many ways but cant seems to work. Probably you could help me with it?
|
|
|
|
|
The other response makes sense. I think what you said is wrong, I don't think you have a hashtable of hashtables. I think you're using a bad key, or a key to a value that was stored as null.
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
Christian Graus wrote: This, by definition, returns a hashtable, not a Product.
I guess ItemList is already the inner hashtable which will, when accessing the indexer, return a Product
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I guess so, I was just looking for the code that does what he asked about - accesses an object that is two hashes deep.
Christian Graus
No longer a Microsoft MVP, but still happy to answer your questions.
|
|
|
|
|
benjamin yap wrote: this is what i do, but i get
Object reference not set to an instance of an object.
on this line
This may have several reasons:
- order is null
- the returned Product may be null: You are checking ContainsKey with a string (Convert.ToString(p.ModelNumber)), but pass some other data type to the hashtable key (p.ModelNumber)
Try this:
foreach (Order order in orderTable.Values)
{
string modelNumberStr = Convert.ToString(p.ModelNumber);
if (order != null && order.ItemList.ContainsKey(modelNumberStr))
{
uint modelNum = ((Product)order.ItemList[modelNumberStr]).ModelNumber;
string cellValue = modelNumberStr;
if (cellValue == Convert.ToString(modelNum))
{
dataGridProduct.Rows[currentRow].Cells["colSelect"].Value = true;
}
}
}
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
thanks! i got it working! thanks to you both!
|
|
|
|
|
Apologies if this is not in the correct forum, but hopefully someone can help with the below issue:
I have a C# Windows Service (.Net 2.0) that is to be installed on a collection of web servers in the DMZ. The Windows Service implements a FileSystemWatcher to check for changes to a set of specific CSV files held on a network share, and will copy locally any updated files before importing these to a local SQL database.
The distribution server that will hold the updated CSV files is also in the DMZ.
The problem:
How can I set up the Windows Service / distribution server so that the service can access the network share securely? It seems that no matter how I set the service up i.e. running as LocalSystem, LocalService, NetworkService or a specific user account (can only be a local account as no access to AD in the DMZ) I get System.UnauthorisedAccessException's occuring when attempting to set up the FileSystemWatcher.
Any help would be greatly appreciated.
Clean code is the key to happiness.
|
|
|
|
|
I created one page which contain one timer which will execute some function after every 5 min and send one mail to my id. Now the problem is i m not able to stop that one after every 5 min i receive mails. I close that page so it not execute but still it is running. How to stop that timer.
|
|
|
|