|
Hi All,
I am getting this error "NO Such interface supported" when from my C# application I am trying to export rows to Excel.
This is a problem only on certain user machines and they are running same vesion of Excel (i.e. 2000)
In refernce to Microsoft article http://support.microsoft.com/default.aspx?scid=kb;EN-US;316653[^]
I did ILDASM on Interop.Excel.dll in my program files and found that classes with suffix _SinkHelper are all Public. But on that users machine it is private. I am wondering why such inconsistency with the same setup project.
Any help and pointers are appreciated.
Thanks
Ruchi
|
|
|
|
|
I am working on a Visual Studio C# data acquisition application. I need to log acquired data to an Access data base.
I have the acquired data stored in my application in a DataTable. I want to append all columns of the DataTable to an Access table.
Since my application will be acquiring data over long periods of time, I don't want to keep all the rows of acquired data in a DataSet - once I write them to the database, I don't want to keep them an every growing DataTable in my application.
The only way I've been able to get this working is to use ExcuteNonQuery with
DbCmd.CommandText="INSERT INTO " + DestTableName + " (" + fields + ") VALUES (" + values + ")";
That's OK, except that I have to build up the INSERT INTO field names and values by iterating thru the table's columns and creating field text from the column names and value text from the column values.
Is there a way to simplify this by using * or some other means to select all the columns of the data row for insertion ito the data base table, so I don't have to build up the field and value strings every time I write to the database? (I suppose I could just build the fields text once since it won't be dynamic.)
Here's my code to insert one row of data into the Access database:
public static int RecordData(DataRow SourceRow, string DestTableName)
{
int NumRecordsAdded = 0;
string fields = "";
string values = "";
foreach (DataColumn col in SourceRow.Table.Columns)
{
//Don't record Key - it creates an SQL syntax error, must be a reserved word
if ( col.ColumnName.ToUpper() != "KEY")
{
if (SourceRow[col.ColumnName] == DBNull.Value)
{
//TODO Flag something if data column not filled
string ErrorMsg = "Data Recording Error - Data Column: " + col.ColumnName + "has no data";
SourceRow[col.ColumnName] = 0;
}
if (fields != "")
fields = fields + ", ";
fields = fields + col.ColumnName;
if (values != "")
values = values + ", ";
System.TypeCode ColTypeCode = System.Type.GetTypeCode(col.DataType);
switch (ColTypeCode)
{
//TODO Handle other data types?
case System.TypeCode.Int32:
values = values + ((Int32)SourceRow[col.ToString()]).ToString();
break;
case System.TypeCode.Double:
values = values + ((double)SourceRow[col.ToString()]).ToString();
break;
case System.TypeCode.String:
values = values + "'" + (string)SourceRow[col.ToString()] + "'";
break;
default:
values = values + "'" + SourceRow[col.ToString()].ToString() + "'";
break;
}
}
}
try
{
LogDB_Connection.Open();
OleDbCommand DbCmd= new OleDbCommand();
DbCmd.Connection = LogDB_Connection;
DbCmd.CommandText="INSERT INTO " + DestTableName + " (" + fields + ") VALUES (" + values + ")";
//MessageBox.Show(DbCmd.CommandText);
NumRecordsAdded = DbCmd.ExecuteNonQuery();
}
catch(Exception e)
{
MessageBox.Show("DB Command Exception '" + e.ToString() + "'");
}
LogDB_Connection.Close();
return NumRecordsAdded;
}
Hans
|
|
|
|
|
Hi,
I need to print text using a printer which is not capable of printing graphics, hterefore Graphics.DrawString fails.
Is there any alternative way to print avoiding DrawString method?
Thanks
Sirwan
|
|
|
|
|
Printing Directly to the Printer
http://www.c-sharpcorner.com/Code/2002/Oct/PrintDirect.asp
|
|
|
|
|
Thanks for the help, it didn't work with the printer star sp200, not hp as it said, there is no response whatsoever.
i use windows app not console and need to print few word not a document.
Are you aware of any other way?
Cheers
Hussein
Sirwan
|
|
|
|
|
Hi
I need to make use a data structure to save a 2D data, let say node_id and node_status and later on I need to manipulate the node_status as necessary. Then I need to count down the nodes as per their staus. Let say the number of nodes whose shatus are 'off', and the rest, whose status are 'on' Should I use an ArrayList ? or an array ? In each case, how do I store, manipulate and search thorugh...and the problem is I am having trouble where/how to collect data into the ArrayList or array.
Thanks. here goes the part of code where I am having problem to implement the data sturcture:
int i;<br />
int num;<br />
int numsect;<br />
<br />
num = NUM_NODES;<br />
ArrayList nbuffer = new ArrayList();<br />
for(i=0; i < num; i++) <br />
{
int j;<br />
numsect = nodes[i].sector_info.numsect;<br />
for(j=0; j < num; j++) <br />
{
double distance, angle, covrdArea;<br />
distance = caldist(nodes[i].lctn, nodes[j].lctn);<br />
<br />
if(distance <= (2*((double)nodes[i].radius)) && distance > 0.0) <br />
{
angle = getangle(nodes[i].lctn, nodes[j].lctn, distance);<br />
<br />
covrdArea = getArea(nodes[i].id, nodes[j].id, distance, angle);<br />
<br />
tw.WriteLine("Distance form Node_" + nodes[i].id + " to Neighbour Node_" + nodes[j].id + " is " + distance);<br />
tw.WriteLine("Angle btw Node_" + nodes[i].id + " in sect " + numsect + " to Neighbour Node_" + <br />
nodes[j].id + " is " + angle);<br />
tw.WriteLine("Neighbouring Node_" + nodes[j].id + " is covering " + covrdArea + " percent of Node_" +<br />
nodes[i].id + "'s sensing area");<br />
<br />
<br />
}
}
tw.WriteLine("----------------- END OF NEIGHBOUR_LIST OF NODE_" + nodes[i].id +" --------------------------");<br />
tw.WriteLine("");<br />
nbuffer.Add(nodes[i].id);<br />
}
nbuffer.Clear();<br />
<br />
tw.Close();<br />
}
Thanks
aussi
|
|
|
|
|
If you're storing a pair, is one of the values unique ? Perhaps a hashtable is a better choice.
Christian
I have several lifelong friends that are New Yorkers but I have always gravitated toward the weirdo's. - Richard Stringer
|
|
|
|
|
Hello ppl,
I am using a tabcontrol for desktop client application(C#/ADO.Net),which has a parser in one tab and report Generator as another tab page. I have used multithreading and assigned a worker thread(say backGroundThread)for the application to parse values - So that the application would repaint itself whenever the user switches back and forth between any window and the application. But as i have used Threading, when parsing is in progress, the user is able to navigate through tabs. So I have to disable the rest of the tabpages in Tabcontrol when parsing in progress.
I tried to reset the tabpage to Parser tab(Sender TabPage) in TabControl_SelectedIndexChanged(object sender, System.EventArgs e)
How do I capture the tabpage(Sender TabPage). i.e name of the tabpage from which the user tried to navigate?
I tried to typecast the sender object to get the sender tabpage.BUt i could not get a break through in identifying the source tabpage.
System.Windows.Forms.TabControl homeTab = (System.Windows.Forms.TabControl)sender;
kindly help me to overcome this problem.
Thanks,
Cheers,
Jagan.
|
|
|
|
|
Below mentioned code will help you to get the index of the Tab page which have the focus.
private void tabPage1_Click(object sender, EventArgs e)<br />
{<br />
TabPage tb=sender as TabPage;<br />
MessageBox.Show("Index is : "+tabControl1.TabPages.IndexOf(tb));<br />
}
Using this code you can achive your requirement.
Sreejith Nair
[ My Articles ]
|
|
|
|
|
Hello sreejith,
Thanks for replying back. But i donot want the name of tab which have the focus.
Let me expain with an example.
Say there are three tabpages - Tabpage tpA,Tabpage tpB,Tabpage tpC in a tabControl and currently user is in Tabpage tpA and clicked on tpB. I want to capture the name of the tab from which the user moved to tpB (either from tbA or tpC).. in otherwords my lastselected tabpage and not the current selected tabpage.
Hope i am clear in explaining my problem.
Cheers,
Jagan
|
|
|
|
|
one way to achive this is keep a global class variable
int lasttabIndex;
At form load time set it to whatever tab you want to open the first time form loads.
There after in event
private void tabControlDeal_SelectedIndexChanged(object sender, System.EventArgs e)<br />
{<br />
TabControl ctrl = (TabControl)sender;<br />
int x = ctrl.SelectedIndex;<br />
<br />
<br />
lasttabIndex = x;<br />
}
Hope this helps
Ruchi
|
|
|
|
|
Thank you ruchi , that was helpful
|
|
|
|
|
Hello all.
I made a NET class library, and now I want to reference it in my application.
The add references dialog allow me to add a reference to the library but I want to reference the library in is Debug version when I'm in the Debug version of the application and its Release version when I'm in release mode ( as I do when I write code in C++ )
Is this possible or I only can reference one dll for Debug and Relese ???
Thanks.
|
|
|
|
|
If your two projects are in the same solution then you reference the project rather than the DLL (properly called an assembly in .NET) and Visual Studio takes care of the Debug/Release versions for you.
Do you want to know more?
Vogon Building and Loan advise that your planet is at risk if you do not keep up repayments on any mortgage secured upon it. Please remember that the force of gravity can go up as well as down.
|
|
|
|
|
I think this doesn't works.
We have solution with an appication an a class library. Right now, the class libray is reference as a project, but my boss showed me on Friday that in a Release build the DLL that was copied to the Output Directory was the Debug version so I would prefer to use other solution (if exits)
|
|
|
|
|
That doesn't sound right to me. If you do a release build it should build the release versions of each of the assemblies. Did you do a rebuild of the solution? Make sure by deleting the bin and obj directories and seeing that it is building the right thing.
Do you want to know more?
Vogon Building and Loan advise that your planet is at risk if you do not keep up repayments on any mortgage secured upon it. Please remember that the force of gravity can go up as well as down.
|
|
|
|
|
Yeah I know that this strange but my boss showed to me. He made a rebuild of the release version and in the ouput window it showed that the Debug version was copied. Also we look at the dates of the dll and
really the Debug version was copied to the Release output.
|
|
|
|
|
The only thing I can think of is that the properties for the project(s) are messed up somewhere.
I suggest you look at the properties for the project, in the Configuration Properties->Build page check that the Debug and Eelease versions are being put in the right places. For instance, check that the release isn't being put in the Debug folder or vice versa.
Do you want to know more?
Vogon Building and Loan advise that your planet is at risk if you do not keep up repayments on any mortgage secured upon it. Please remember that the force of gravity can go up as well as down.
|
|
|
|
|
Is the source for the .DLL in a seperate SOLUTION? What Colin is telling you will work if your .DLL Project and your application project are in the same solution.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
No, there are in the same solution. The only thing to comment is that the application is written in c++ and the dll in c#. I don't know if this can be the reason for the problem
|
|
|
|
|
Then there shouldn't be a problem. If you rebuild the entire solution, instead of a project, AND use project references instead of assembly references in your C++ app, then selecting Release or Debug should apply to all projects in the solution.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thanks Dave. I will try this.
|
|
|
|
|
Hi~
I am writting C# application to call a VC++ dll by P/Invoke.
There is a CString argument type for the method in C++ dll exposed to C#.
What is the corresponding data type in C#?
Thanks
|
|
|
|
|
You can freely substitute CString objects for const char* and LPCTSTR function arguments. And here in C# you can go for string.
Sreejith Nair
[ My Articles ]
|
|
|
|
|
For the P/Invoke you should use StringBuilder
|
|
|
|