|
That was my guess: "I want you to do my homework" but it'd be nice to know if he's genuine and wants to think or just waste his whole life ...
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Democracy's in danger!
"I'm neither for nor against, on the contrary." John Middle
|
|
|
|
|
I'd like to start using more C# generics. Can someone tell me what the
<?> portion of the method syntax below represents? Is it a placeholder for the object type? (see my example further down)
<Access Specifier> <Return Type> <Method Name><?>(Parameter List)
{
Method Body
}
I was wanting to do something like this, so that I could pass either an OLEDB DB Connection object or an SqlClient connection object.
private T DataConnection<T> ( T db_conn_obj , int index_of_mydatafile )
{
...
}
|
|
|
|
|
The "bit in the middle" is the indicator that this is a Generic method, and allows you to specify a substitution name which identifies where the generic class type is needed. It doesn't have to be <T> - you can use any valid identifier:
private TypeOfClass DataConnection<TypeOfClass>(TypeOfClass db_conn_obj, int index_of_mydatafile)
{
return db_conn_obj;
}
But the convention is to use "T" as the generic class name.
The trouble with that is I can happily pass any class type to your method:
var x = DataConnection("hello", 666); And it will work - additionally, You can't use any of the fields, properties, or methods of your Connection, even if you pass an SqlConnection object.
The solution is to apply a constraint:
private T DataConnection<T>(T db_conn_obj, int index_of_mydatafile) where T: System.Data.Common.DbConnection
{
Console.WriteLine(db_conn_obj.ConnectionString);
db_conn_obj.Open();
return db_conn_obj;
}
Which limits the classes you can pass to those derived from DbConnection (which includes SqlConnection, OleDbConnection, and so forth:
var x = DataConnection(new SqlConnection(), 666);
var y = DataConnection(new OleDbConnection(), 666);
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
This is a big help! I've been working on it for hours. I'm working on some existing code that I'm supposed to make work with both OleDbConnection as well as SqlConnection.
It's more of a training exercise for me, because it looks like it's going to take a lot of time to convert all of the db methods to use either connection.
So right now, I have an OleDbConnection, like so:
private OleDbConnection DataConnection ( int index_of_mydatafile )
{
string dbpath = MyDataFiles[ index_of_mydatafile ];
string conn_string = OledbProvider(dbpath) + "data source=" + dbpath;
Debug.WriteLine ( conn_string );
return new OleDbConnection ( conn_string );
}
The connection is just be declared and instantiated in a using statement like this:
using ( OleDbConnection dbConnection = DataConnection ( index_of_mydatafile ) )
using ( OleDbCommand dbCommand = new OleDbCommand ( sql , dbConnection ) )
using ( OleDbDataAdapter adapter = new OleDbDataAdapter ( dbCommand ) )
So the command object is actually opening the connection later. To get this working, I tried this, but I'm stuck at the new declaration, which is causing an error, presumably because I need to cast the T maybe? I'm just pulling things out of thin air now. lol
private T DataConnection<T> ( T db_conn_obj , int index_of_mydatafile ) where T : System.Data.Common.DbConnection
{
string dbpath = MyDataFiles[ index_of_mydatafile ];
string provider = OledbProvider ( dbpath );
string conn_string = provider + "data source=" + dbpath;
Debug.WriteLine ( conn_string );
if ( provider == "" )
{
conn_string = @"Data Source= xxxx\xxxx;Initial Catalog=xxxx;Integrated Security=SSPI;Connect Timeout=5;ConnectRetryCount=0;ApplicationIntent=ReadWrite;"
}
return new T ( conn_string );
}
|
|
|
|
|
Ah! To create a new instance, you need to tell it that the only classes that can be "generic-ed" are concrete classes (like OldedbConnection, and SqlConnection), not abstract classes like DbConnection.
That's easy: add the new constraint (and remove the class instance from the parameters list):
private T DataConnection<T>(int index_of_mydatafile) where T : System.Data.Common.DbConnection, new()
{
T db_conn_obj = new T();
db_conn_obj.ConnectionString = "...";
db_conn_obj.Open();
return db_conn_obj;
}
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
Holy crap, man! That's freak'n awesome! It's a double ++ because the original code doesn't include the class instance in the parameters list.
This is the first time I actually posted a question on any programmer's forum. I wish I had done this sooner.
I really appreciate it.
|
|
|
|
|
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
RickBishop wrote: I'm supposed to make work with both OleDbConnection as well as SqlConnection.
Could be done fairly easy without generics. See A short tale on two patterns that live in .NET[^].
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
This is very applicable. I will take a look. Thanks for sharing!
|
|
|
|
|
You're welcome, and thanks
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
What do you need, and what do the connections have in common?
You will find that OldDbConnection and SqlConnection (among others) inherit from Common.DbConnection (which also has an interface).
You can pass a class instance that another class "inherits" from (or an interface) if it meets your requirements instead of having to resort to generics (in this case).
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
I'm very new to Active Directory, so bear with me please...
First
I'm using the following to validate a user:
public bool ValidateUser(Credentials credentials, string userName = "", string password = "")
{
using (var context = new PrincipalContext(ContextType.Domain, credentials.ServerName, credentials.UserName, credentials.Password))
{
return context.ValidateCredentials(userName, password);
}
}
But the ValidateCredentials takes the password in PLAIN TEXT and it works fine. This doesn't seem right. How is encryption handled? How do you encrypt the text and how does AD know the PW is encrypted?
Second
Next, I know that LDAP is a protocol. From what I see you specify LDAP in the
query string, as in "LDAP://OU=staffusers,DC=leeds-art,DC=ac,DC=uk"
Is this the way it's done? How do you specify another protocol to use?
Thanks
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
1) You don't encrypt the text. You're correct is questioning "how does AD know the PW is encrypted?". It doesn't. The function you're calling is running on your machine, not the server. The method hashes the password for you, gets the encrypted account details, including password, from the domain controller and makes the comparison locally. The password never leaves the machine.
2) Go through this: Howto: (Almost) Everything In Active Directory via C#[^]
System.ItDidntWorkException: Something didn't work as expected.
C# - How to debug code[ ^].
Seriously, go read these articles.
Dave Kreskowiak
|
|
|
|
|
Dave Kreskowiak wrote: 1) You don't encrypt the text. You're correct is questioning "how does AD know the PW is encrypted?". It doesn't. The function you're calling is running on your machine, not the server. The method hashes the password for you, gets the encrypted account details, including password, from the domain controller and makes the comparison locally. The password never leaves the machine.
I figured that's what happening. Do you know of any docs that state this?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Only the training materials I had way back in the day.
System.ItDidntWorkException: Something didn't work as expected.
C# - How to debug code[ ^].
Seriously, go read these articles.
Dave Kreskowiak
|
|
|
|
|
Kevin Marois wrote: But the ValidateCredentials takes the password in PLAIN TEXT and it works fine. This doesn't seem right. How is encryption handled? How do you encrypt the text and how does AD know the PW is encrypted? Did you even consider a scenario where it is not encrypted?
Kevin Marois wrote: Is this the way it's done? How do you specify another protocol to use? By prefixing it with the protocol-handler[^]. For ftp we use the ftp:// prefix, for webpages http, etc. You can even register custom prefixes.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Good morning to all!
I need to show two headers in a listview control, I've been looking for information about it, but I don't found it.
Can help me?
|
|
|
|
|
Yes, use the WPF ListView's GridView.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
Create your own customized Listview which basicly is a UserControl.
Inside this UserControl you have your Headers a needed (Labels) and the ListView under the Header-Labels.
|
|
|
|
|
Hello, I have inherited some C#.NET code that builds a dynamic dashboard on page load. The dynamic dashboard consists of a table and 2 rows - one row showing online devices, the other row showing offline devices. My issue is that if there are more than 5 devices on a given row, the row gets cluttered and looks terrible. I would like to break the line at 4 devices, but I am so confused by the logic. I have spent the last 48 hours swirling through this code and trying to find where to break the line and how - I am still lost. Please, any help would be very much appreciated. Please see a snapshot of the code below. Thank you so much in advance. -Jason
protected void Page_Load(object sender, EventArgs e)
{
if (this.Session["UserID"] == null)
{
Response.Redirect("Login.aspx");
}
Response.AppendHeader("Refresh", "8");
HtmlMeta meta = new HtmlMeta();
meta.HttpEquiv = "Content-Language";
meta.Content = "en";
MetaPlaceHolder.Controls.Add(meta);
List<TableCell> OnCells = new List<TableCell>();
List<TableCell> OffCells = new List<TableCell>();
DataTable dt = DatabaseObjects.UserDO.GetAllBoardID(Int32.Parse(this.Session["UserID"].ToString()));
foreach (DataRow r in dt.Rows)
{
string inner = r["DeviceType"].ToString();
TableCell cell = new TableCell();
DataTable FonaDT = new DataTable();
DataTable dt2 = new DataTable();
DataTable fonaReturn = new DataTable();
DataTable normalReturn = new DataTable();
DateTime now = new DateTime();
if (DatabaseObjects.UserDO.IsFona(r["BoardID"].ToString()))
{
FonaDT = DatabaseObjects.UserDO.GetFonaSensors(r["BoardID"].ToString());
}
else
{
dt2 = DatabaseObjects.UserDO.GetSensorIDFromBoardID(r["BoardID"].ToString());
}
if (FonaDT.Rows.Count > 0)
{
int count = 0;
foreach (DataRow r2 in FonaDT.Rows)
{
if (count > 0)
{
cell = new TableCell();
cell.HorizontalAlign = HorizontalAlign.Center;
fonaReturn = DatabaseObjects.UserDO.GetDashboardData(r["BoardID"].ToString(), r2["sensor_name"].ToString());
if (fonaReturn.Rows.Count > 0)
{
now = DateTime.Now;
DateTime LastData = DateTime.Parse(fonaReturn.Rows[0]["ts_Datetime"].ToString());
TimeSpan diff = now.Subtract(LastData);
if (diff.TotalSeconds <= 120)
{
cell.Text += "<div class=\"badgeOn\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + fonaReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OnCells.Add(cell);
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> Last Online: " + LastData.ToString("MM/dd/yyyy hh:mm tt");
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + fonaReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> Last Online: " + " N/A"+"</br>";
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: N/A" + "</label>";
OffCells.Add(cell);
}
}
else
{
cell = new TableCell();
cell.HorizontalAlign = HorizontalAlign.Center;
fonaReturn = DatabaseObjects.UserDO.GetDashboardData(r["BoardID"].ToString(), r2["sensor_name"].ToString());
if (fonaReturn.Rows.Count > 0)
{
now = DateTime.Now;
DateTime LastData = DateTime.Parse(normalReturn.Rows[0]["ts_Datetime"].ToString());
TimeSpan diff = now.Subtract(LastData);
if (diff.TotalSeconds <= 120)
{
cell.Text += "<div class=\"badgeOn\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + fonaReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OnCells.Add(cell);
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> Last Online: " + LastData.ToString("MM/dd/yyyy hh:mm tt");
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + fonaReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r2["sensor_name"].ToString();
cell.Text += "</br> Last Online: " + " N/A" + "</br>";
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: N/A" + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
count++;
}
}
if (dt2.Rows.Count > 0)
{
int count2 = 0;
foreach (DataRow r3 in dt2.Rows)
{
if (count2 > 0)
{
cell = new TableCell();
cell.HorizontalAlign = HorizontalAlign.Center;
normalReturn = DatabaseObjects.UserDO.GetDashboardData(r["BoardID"].ToString(), r3["SensorID"].ToString());
if (normalReturn.Rows.Count > 0)
{
now = DateTime.Now;
DateTime LastData = DateTime.Parse(normalReturn.Rows[0]["ts_Datetime"].ToString());
TimeSpan diff = now.Subtract(LastData);
if (diff.TotalSeconds <= 120)
{
cell.Text += "<div class=\"badgeOn\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r3["SensorID"].ToString();
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + normalReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OnCells.Add(cell);
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r3["SensorID"].ToString();
cell.Text += "</br> Last Online: " + LastData.ToString("MM/dd/yyyy hh:mm tt");
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + normalReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r3["SensorID"].ToString();
cell.Text += "</br> Last Online: " + " N/A" + "</br>";
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: N/A" + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
else
{
cell = new TableCell();
normalReturn = DatabaseObjects.UserDO.GetDashboardData(r["BoardID"].ToString(), r3["SensorID"].ToString());
cell.HorizontalAlign = HorizontalAlign.Center;
if (normalReturn.Rows.Count > 0)
{
now = DateTime.Now;
DateTime LastData = DateTime.Parse(normalReturn.Rows[0]["ts_Datetime"].ToString());
TimeSpan diff = now.Subtract(LastData);
if (diff.TotalSeconds <= 120)
{
cell.Text += "<div class=\"badgeOn\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text +="</br>"+ r3["SensorID"].ToString();
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + normalReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OnCells.Add(cell);
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important;\">" + inner + "</label>";
cell.Text += "</br>" + r3["SensorID"].ToString();
cell.Text += "</br> Last Online: " + LastData.ToString("MM/dd/yyyy hh:mm tt");
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: " + normalReturn.Rows[0]["value"].ToString() + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
else
{
cell.Text += "<div class=\"badgeOff\">" + "<label style=\"font-size:small !important; color:#67BCDB;text-decoration:underline; font-weight:bold !important; \">" + inner + "</label>";
cell.Text += "</br>" + r3["SensorID"].ToString();
cell.Text += "</br> Last Online: " + " N/A"+"</br>";
cell.Text += "</br> <label style=\"color:red\">" + "Last Value: N/A" + "</label>";
cell.Text += "</div>";
OffCells.Add(cell);
}
}
count2++;
}
}
}
TableRow OnRow = new TableRow();
TableRow OffRow = new TableRow();
TableCell onHead = new TableCell();
TableCell offHead = new TableCell();
onHead.Text = "<div class=\"horoOn\">Online</div>";
onHead.BackColor = System.Drawing.Color.Gray;
onHead.ColumnSpan = 30;
OnRow.Cells.Add(onHead);
offHead.Text = "<div class=\"horoOff\">Offline</div>";
offHead.BackColor = System.Drawing.Color.Gray;
offHead.ColumnSpan = 30;
OffRow.Cells.Add(offHead);
Unit p = new Unit(200, UnitType.Pixel);
OnRow.Width = p;
OnRow.Height = p;
OffRow.Width = p;
OffRow.Height = p;
foreach (TableCell c in OnCells)
{
OnRow.Cells.Add(c);
}
foreach (TableCell c2 in OffCells)
{
OffRow.Cells.Add(c2);
}
table1.Rows.Add(OnRow);
table1.Rows.Add(OffRow);
}
|
|
|
|
|
Any sane person will tell you to "start over"; beginning with a mockup of the intended output.
A mini death march otherwise.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|
|
All,
I am new to C# code, I am trying to achieve copying the file from SFTP location to SQL Azure using SQL Bulk copy method. This I can achieve,but when I am trying to use foreach loop to read multiple files from SFTP file list I couldn’t able do it.
I can’t copy paste my code here, could some one out here help me out how can I achieve this specific to Azure DB ?
TIA.
Naveen A
|
|
|
|
|
Sooooo, you want help fixing your code which we can't see and can't possibly guess at what it looks like?
Good luck with that.
System.ItDidntWorkException: Something didn't work as expected.
C# - How to debug code[ ^].
Seriously, go read these articles.
Dave Kreskowiak
|
|
|
|
|
Maybe try one file first.
Maybe you're eating your lunch too fast.
"(I) am amazed to see myself here rather than there ... now rather than then".
― Blaise Pascal
|
|
|
|