|
|
What about it?
V.
I found a living worth working for, but haven't found work worth living for.
|
|
|
|
|
pariisa wrote: Art network with C#
Syntax error: Missing verb or verb misconjugated.
If "art" is used as an ajective and "network" the noun then the question or sentence is missing a verb.
If "Art" is used as a proper noun (the diminutive form of "Arthur" and "network" is a misconjugated verb, should be "networks", then this statement is missing context. Who is Arthur, and what does he wish to network with C#?
|
|
|
|
|
PlayByTheRules wrote: Who is Arthur, and what does he wish to network with C#?
He wants to take it out to dinner. A nice meal, with a few glasses of wine. Maybe a gypsy band playing in the backgroung. Then, who knows?
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
PlayByTheRules wrote: If "Art" is used as a proper noun (the diminutive form of "Arthur" and "network" is a misconjugated verb, should be "networks", then this statement is missing context. Who is Arthur, and what does he wish to network with C#?
I believe that network is being used as a verb in the imperative and there should therefore be a comma or exclamation mark
Art! Network with c#.
Russell
|
|
|
|
|
Ooh. I like that one.
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
|
Hi,
I'm tying to use code from the MS web site (Implement a DataSet GROUP BY Helper Class ):
http://support.microsoft.com/kb/326145
The code works well with the DataTable sample they show, but when I use a DataTable populated from an Access database, the object comparison does not work. It only works if I convert to string... any idea why?
********************************************************************************
if (!ColumnEqual( LastSourceRow[Field.FieldName, SourceRow[Field.FieldName] ))
{// yada }
private bool ColumnEqual(object a, object b)
{
/*
* Compares two values to see if they are equal. Also compares DBNULL.Value.
*
* Note: If your DataTable contains object fields, you must extend this
* function to handle them in a meaningful way if you intend to group on them.
*/
if ((a is DBNull) && (b is DBNull))
return true; //both are null
if ((a is DBNull) || (b is DBNull))
return false; //only one is null
return (a==b); //value type standard comparison
}
*********************************************************************************
I did this to make it work:
if (!ColumnEqual( LastSourceRow[Field.FieldName].ToString(), SourceRow[Field.FieldName].ToString() ))
{//yada }
private bool ColumnEqual(string a, string b)
{
/*
* Compares two values to see if they are equal. Also compares DBNULL.Value.
*
* Note: If your DataTable contains object fields, you must extend this
* function to handle them in a meaningful way if you intend to group on them.
*/
if ((a == "") && (b == ""))
return true; //both are null
if ((a == "") || (b == ""))
return false; //only one is null
return (a == b); //value type standard comparison
}
thanks,
Ron
-- modified at 3:07 Wednesday 21st March, 2007
|
|
|
|
|
it works here, with datatable and regular cells.
<br />
DataTable dt = new DataTable("temp");<br />
dt.Columns.Add("col1");<br />
dt.Rows.Add("row1");<br />
dt.Rows.Add("row2");<br />
dt.Rows.Add("row3");<br />
<br />
Console.WriteLine(ColumnEqual(dt.Rows[1][0], dt.Rows[1][0]));<br />
Console.Read();
--> This outputs True (can test it in an empty console app).
You should check it with the debugger, using breakpoints, to see what values are actually compared.
Visual Studio can't evaluate this, can you?
public object moo<br />
{<br />
__get { return moo; }<br />
__set { moo = value; }<br />
}
|
|
|
|
|
Hi joo,
I used MessageBox to show me the comparison, row by row, and they do have the same string in the object (object.ToString()).
They don't compair to true if left in the object (This only happends if the DataTable is populated by ADO). If building the DataTable by code (as in your example), this works fine.
Ron
|
|
|
|
|
It still works when I use ADO...
Your problem appears to be very strange.
SqlConnection conn = new SqlConnection("connstring");<br />
SqlDataAdapter da = new SqlDataAdapter("select * from [table]",conn);<br />
DataSet ds = new DataSet();<br />
da.Fill(ds);<br />
dataGridView1.DataSource = ds;<br />
<br />
Console.WriteLine(ds.Tables[0].Rows[1][1] == ds.Tables[0].Rows[1][2]);
Console.WriteLine(ds.Tables[0].Rows[1][1] == ds.Tables[0].Rows[1][1]);
Visual Studio can't evaluate this, can you?
public object moo<br />
{<br />
__get { return moo; }<br />
__set { moo = value; }<br />
}
|
|
|
|
|
Yes, I spent hours trying to figure out why it was not grouping. Finally, I tried changing the object to a string right at the compairison (a.ToString() == b.ToString()) and magically the grouping worked.
Damn, I guess I have to go to work (day job).
Ron
|
|
|
|
|
Yes, it is probably a good solution. But I still think it's strange that it didn't work before, because here in my sandboxapp it does. Weird.
Have fun working
Visual Studio can't evaluate this, can you?
public object moo<br />
{<br />
__get { return moo; }<br />
__set { moo = value; }<br />
}
|
|
|
|
|
Hi again joon,
I've been playing around with the stock code again...
I've noticed that if you try and Group By the other columns (OrderID",Int32) [I did change a few rows so some are the same value], it will not group. The stock code only seems to group on a string column? Could you check it our with your sandboxapp?
thanks,
Ron
|
|
|
|
|
OK, I see now...
I'm a fairly new programmer (with no formal training), so I'm not familiar with object comparison. The other methods (min, max) use IComparable, but they don't bother using it for the ColumnEqual method.
I've changed:
return (a==b); //value type standard comparison
to:
if (((IComparable)a).CompareTo(b) == 0)
return true;
else
return false;
works great now, on the different data types and my OleDbCommand string results.
Ron
|
|
|
|
|
The comparison is not right. Having an empty string is not the same as having a null string. What you want to do is expand your checks for this:
private bool ColumnEqual(string a, string b)
{
if (string.IsNullOrEmpty(a) && string.IsNullOrEmpty(b))
return true;
if (string.IsNullOrEmpty(a) || string.IsNullOrEmpty(b))
return false;
return (a == b);
}
Deja View - the feeling that you've seen this post before.
|
|
|
|
|
Thanks Pete,
Yes, I was also worried about null strings too, but I did a test to see what output I would get.
When you convert a DBNull.Value to string, the result is String.Empty. I'll use IsNullOrEmpty, just to be safe though.
Ron
if (DBNull.Value.ToString() == null)
{
MessageBox.Show("null");
}
else if (DBNull.Value.ToString() == "")
{
MessageBox.Show("empty string");
}
else
{
MessageBox.Show("not null or empty");
}
|
|
|
|
|
hi..
i'm writing a utility package for my tool..
i want a method to be used globally that can be called with out
object or its class name.. is it possible.
plz help me..
regards,
nas
|
|
|
|
|
Hello,
Have you tried a static method?
All the best,
Martin
|
|
|
|
|
A public static class with public static methods is probably as close as you can get. Then you can just use Class.DoMethod() from anywhere where the class is available (same project or it's in a reference, don't forget using directive)
<br />
namespace Globality<br />
{<br />
public static class GlobalClass<br />
{<br />
public static void MyMethod()<br />
{<br />
}<br />
}<br />
}<br />
and then somewhere else
<br />
using Globality<br />
<br />
GlobalClass.MyMethod();<br />
Visual Studio can't evaluate this, can you?
public object moo<br />
{<br />
__get { return moo; }<br />
__set { moo = value; }<br />
}
|
|
|
|
|
you could have a public static delegate declared in your app and then assign it when the object containing the method you want to call is instantiated.
Russell
|
|
|
|
|
Hi,
Best way is to show you what I want:
SQL Database:
SqlConnection connection = new SqlConnection(connectionString);<br />
SqlCommand getTableList = connection.CreateCommand();<br />
string command = "Select name from sysobjects where type = 'U'";<br />
getTableList.CommandText = command;<br />
connection.Open();<br />
string tables = getTableList.ExecuteScalar().ToString();<br />
connection.Close();<br />
MessageBox.Show("We got ..\n" + tables);
How do I store the results of the SQL Command?
The command appears to work OK but only the name of the first table is recorded in "tables".
Ideally I would like to put the results of the SQL command into an array.
TIA.
Glen Harvy
|
|
|
|
|
Glen,
You only get the first table because you're using the executeScalar method.
To get what you want you need to use the executeReader.
Your code would thus be smth like:
SqlConnection connection = new SqlConnection(connectionString);
string command = "Select name From sysobjects where type ='U'";
SqlCommand getTableList = new SqlCommand(command, connection);
myConnection.Open();
SqlDataReader reader = getTableList.ExecuteReader(CommandBehavior.CloseConnection);
List<string> tables=new List<string>();
while(reader.Read())
{
tables.Add(reader.GetString(0));
}
reader.Close();
//Implicitly closes the connection because CommandBehavior.CloseConnection was specified.
This should get you the list.
Greeting
Kaine
|
|
|
|
|
I agree fully with Kaine.
just an alternate method when using a reader.
SqlDataReader reader = getTableList.ExecuteReader();
and then continue to add to the tables, while using reader.Read().
Keshav Kamat
India
|
|
|
|
|
Thansk for that - much appreciated.
Glen Harvy
|
|
|
|