|
Hi,
I'm writing a C# windows application program that needs to connect to the SQL server 2000 or SQL 2005. What i want to do is when the user selects to connect to the server, a pop-up window appears that opens the data connection wizard where the can go through the wizard and connect to the sql servers are any other servers. Is this possible? If so, can someone please tell me how to do this?
|
|
|
|
|
Prompt the user for the server,Database,username, password. Prepare the connection string internally, connect using SqlConnection.
For enumerating the list of database, servers, use DMO or the new variant SMO
|
|
|
|
|
Hello,
Do you know a good resource which would describe possible situations that can leed to memory leaks? such as eventhandlers to objects that are no more needed and forms that aren't disposed after closing. Any article that would describe such situations and how to prevent them? Thanks
|
|
|
|
|
The only resource I know of is experience, or the tried and true technique of "trial and error".
|
|
|
|
|
Dave Kreskowiak wrote: The only resource I know of is experience, or the tried and true technique of "trial and error".
Know that feeling :->
|
|
|
|
|
Dave Kreskowiak wrote: The only resource I know of is experience, or the tried and true technique of "trial and error".
So you say that there is not any article in the internet on that subject?
|
|
|
|
|
|
originSH wrote: He's saying he doesn't know of one.
Thank you!
|
|
|
|
|
np
|
|
|
|
|
Hello,
How can I build a IP lan scanner in .net(vb.net/c#)?
It should give the list of all computers/devices in the network, and their relative IPs and (eventually) MAC Address and device/computer name.
Thanks in advance,
Carmine,
Webmaster of: www.thetotalsite.it
My web blog: blog.thetotalsite.it
|
|
|
|
|
|
Mhm but that program displays only PCs based on Windows.
Is there a way to display all network devices? (network printers, routers, PCs with Linux/MAC etc.)?
Carmine,
Webmaster of: www.thetotalsite.it
My web blog: blog.thetotalsite.it
|
|
|
|
|
|
I have a slightly different problem, I have a generic function that handles populating all the properties of a class and all it's inhreited class objecs. Such as this:
public static List<iperson> TGeneratePersonList(IDataReader oDR, ePersonType PersonType)
{
ArrayList oCols = Field.GetColumnNames(oDR);
oCols = Utilities.Field.GetColumnNames(oDR);
iPerson oP = null;
List<iperson> oPList = new List<iperson>();
while (oDR.Read())
{
switch (PersonType)
{
case ePersonType.Basic:
oP = new Person();
break;
case ePersonType.Contract_Person:
oP = new Contract_Person();
((Contract_Person)oP).Contract_Person_ID = Field.GetInt(oDR, "Contact_ID");
break;
case ePersonType.Vendor_Person:
oP = new Vendor_Person();
break;
}
oPList.add(oP);
}
return oPList;
}
THe problem is when I try to assign this result to a property of an object deined as :
public List<vendor_person> Personnel_List
{
get
{
if (this._Personnel_List == null)
this._Personnel_List = new List<vendor_person>();
return this._Personnel_List;
}
set
{
this._Personnel_List = value;
}
}
I get this at compile time:
Error 4 Cannot implicitly convert type 'System.Collections.Generic.List<projectcentral.contacts.iperson>' to 'System.Collections.Generic.List<projectcentral.contacts.vendor_person>' C:\Projects\ProjectCentral\ProjectCentral.Vendors\GenericVendor.cs 281 39 ProjectCentral.Vendors
Any ideas? It's rather urgent since I've been fighting with this for days and my job is on the line.
THanls;
|
|
|
|
|
You need to pre-define the type for the generic List class to the type of the object that will be populating it i.e. iPerson so assuming classes Person, Contract_Person and Vendor_Person are all derived from iPerson your code needs to change to the following:
public static List<iPerson> TGeneratePersonList(IDataReader oDR, ePersonType PersonType)
{
...
iPerson oP = null;
List<iPerson> oPList = new List<iPerson>();
...
}
and your property to:
public List<iPerson> Personnel_List
{
...
}
and the field _Personnel_List to:
private List<iPerson> _Personnel_List;
Incidentally, the TGeneratePersonList() is not a generic method - it is an ordinary method that returns a generic List of type iPerson.
This is a generic method:
public void GenericMethod<T>() // Where type T is defined when the method is called
{
// Do something with T in here
}
example calls
GenericMethod<int>();
GenericMethod<string>();
GenericMethod<MyClass>();
|
|
|
|
|
|
Maybe I am missing the point somewhere but I cannot see why you need to use generics to do this.
In my previous example by placing all the initialisation properties into iPerson for example would enable you to initialise all classes derived from iPerson i.e.
// Interface that defines properties and methods to be called during initilaisation
public interface I
{
string Prop1 { get; set; }
int Prop2 { get; set; }
void Initialise(params object[] arrParams);
}
// Classes to be initialised
class A: I
{
private string _prop1 = null;
private int _prop2;
// Interface implementations
string I.Prop1
{
get { return _prop1; }
set { _prop1 = value; }
}
int I.Prop2
{
get { return _prop2; }
set { _prop2 = value; }
}
void I.Initialise(params object[] arrParams)
{
// Do some initialisation on params
Initialise(arrParams);
}
// Option for in class initialisation - could use virtual.
protected abstract void Initialise(params object[] arrParams);
}
class B: A
{
protected override void Initialise(params object[] arrParams)
{
}
}
class C: B
{
private string Prop3 = null;
protected override void Initialise(params object[] arrParams)
{
}
}
Now using interface I to initialise instances of A, B or C as follows:
//Create list
List<I> items = new List<I>();
// This could equally be:
// ArrayList items = new ArrayList();
....
if (ClassType == eType.A)
{
items.Add(new A());
}
else if (ClassType == eType.B)
{
items.Add(new B());
}
else if (ClassType == eType.C)
{
items.Add(new C());
}
// Initialisation can be performed on object instances of type A, B and C this way using interface I no casting required.
foreach (I item in items)
{
// Initialise object properties
item.Prop1 = source.P1;
item.Prop2 = source.P2;
//Or even call an initialise method on the object itself.
item.Initialise(source.P1, source.P2, "P3");
}
This example relies on a single interface structure defined at compile time, this is also a requirement that applies to generics - if what you are looking for is to try and initialise objects by examining their structures at run-time then this falls into the realms of Reflection - and only do this if for some reason you really need to.
If you are requiring to initialise properties that apply to the derived classes (i.e class C)
you could used the Initialise() method shown but you would have to either apply strict parameter ordering or employ a mechanism for identifying which parameter goes to which property.
|
|
|
|
|
Sorry man, you went out to left field and away from the topic at hand. Thanks for your help anyway.
|
|
|
|
|
Ok, I apologize again. Just having a frustrating day. I think I follow what you were trying to explain. I've also watched the webcast from Juval Lowy. What I was trying to explain in my previous post is that I got my function (not a method) to return a generic list of an interface that all my classes implement. What I don't quite understand is how I use this list in the referencing call if I'm expecting a List of of a specific type that implements that interface. Basically it looks to me like I have to iterate throuh the list and cast each object to my desired type in order to get the intelisense etc. Are you saying that I should have my function call look like this based on my last example? If so this won't compile because I get the following error on each result.Add()
Error 1 The best overloaded method match for 'System.Collections.Generic.List<t>.Add(T)' has some invalid arguments C:\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 95 17 ConsoleApplication1
Error 2 Argument '1': cannot convert from 'ConsoleApplication1.A' to 'T' C:\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 95 28 ConsoleApplication1
public static List<t> GetList<t>() where T : A,iClass
{
List<t> result = new List<t>();
iClass oC = null;
if (typeof(T) == typeof(A))
{
oC = new A();
((A)oC).Full_Name = "A_Tom";
result.Add((A)oC);
oC = new A();
((A)oC).Full_Name = "A_Bill";
result.Add((A)oC);
oC = new A();
((A)oC).Full_Name = "A_Jack";
result.Add((A)oC);
}
else if (typeof(T) == typeof(B))
{
oC = new B();
((B)oC).Full_Name = "b_Tom";
result.Add((B)oC);
oC = new B();
((B)oC).Full_Name = "B_Bill";
result.Add((B)oC);
oC = new B();
((B)oC).Full_Name = "B_Jack";
result.Add((B)oC);
}
return result;
}
|
|
|
|
|
I got it , I got it, I got it!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
f
public static List<t> GetList<t>() where T :B, iClass, new()
{
T obj = new T();
List<t> result = new List<t>();
if (typeof(T) == typeof(A))
{
((A)obj).PhoneA = "444-4444";
result.Add(obj);
}
else if (typeof(T) == typeof(B))
{
((B)obj).SSN = "123-12-1111";
result.Add(obj);
}
return result;
}
|
|
|
|
|
You are still having to cast classes A and B though????
|
|
|
|
|
Here's my thing that I don't understand about what you presented earlier, you say to use the Initialise method of the Interface on each individual Derrived class to initilise that instance. My problem with this sample is that you're using an array of type object[] which in itself will do implicit cast on each item thus degrading performance. Secondly you're example of
//Or even call an initialise method on the object itself.
item.Initialise(source.P1, source.P2, "P3");
}
tells me that you will need to write an Initialisation override on each generation of the object, in this case to be able to handle "P3". I guess if it's a virtual you could call base.Initialise and pass it the same params. WOuld that be way to go?
|
|
|
|
|
I got it, I got it, I got it.........Again! I found an elegant solution I think. A light bulb is starting shine!!!! Tell what you think about this solution. THis will allow me to use a static function. WOuld it be better to use an instance virtual function and have each derrived instance call the base.function instead?:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
B objB = new B();
List<iclass> oBList = new List<iclass>();
List oList = A.GetList();
}
}
public interface iClass
{
string Full_Name
{
get;
set;
}
string Short_Name
{
get;
set;
}
}
public class A : iClass
{
public A()
{
}
private string _PhoneA = "";
private string _Full_Name = "";
private string _Short_Name = "";
public string PhoneA
{
get { return _PhoneA; }
set { _PhoneA = value; }
}
public static List<t> GetList<t>() where T : iClass, new()
{
T obj = new T();
List<t> result = new List<t>();
obj.Full_Name = "Susan";
obj.Short_Name = "Su";
if (typeof(T) == typeof(A))
{
(obj as A).PhoneA = "444-4444";
result.Add(obj);
}
else if (typeof(T) == typeof(B))
{
(obj as B).SSN = "123-12-1111";
result.Add(obj);
}
return result;
}
public string Full_Name
{
get { return _Full_Name; }
set { _Full_Name = value; }
}
public string Short_Name
{
get { return _Short_Name; }
set { _Short_Name = value; }
}
}
public class B : A, iClass
{
private string _SSN = "";
public string SSN
{
get { return _SSN; }
set { _SSN = value; }
}
}
}
|
|
|
|
|
|