|
Hi,
I Have a C# windows application and it is connected to MS SQL database using direct connection, the database is in server and the application in a client machine (other PC).
My question is when I save a transaction from client PC with datetime to a table in the sql databse on the server (DateTime.Now) get the client datetime, I need to insert the Server datetime not the client, please let me know is it possible to do this.
Insert into XYZ(ID,Name,InsertDate) Values (1,'Test',DateTime.Now)
I need DateTime.Now to be server datetime, and Don't need to use getDate() sql.
Thank You
|
|
|
|
|
its not clear how you're putting that insert together - I hope not concatenation, but you're building a parameterised query .. anyway
MySQL has a date/time function NOW() MySQL Date and Time Functions[^] - my thoughts are that that is a server datetime
whoops, you wanted MSSQL not MySQL - sorry .. how about SYSDATETIME() Date and Time Data Types and Functions (Transact-SQL)[^] - description looks correct 'instance on which MSSQL is running'
|
|
|
|
|
Yes, it is parameterized and not a concatenation one, but I don't need to use sqldate I need to read the date from server and insert it again
thanks
|
|
|
|
|
If you want the actual server Date and Time value, then you have little choice but to use GETDATE() - that is the only way to get the server setting. You could "prefetch" it, but if the timestamp is important that's a bad idea and it could be out by seconds or more by the time you use it.
Or you could use GETUTCDATE() which returns a universal value rather than one based on the server locale settings.
If you don't want to call it directly, the other option is to add one of the two function calls as the default value for that column when you define the table - that way the system will set it for you if you don't specify it.
And please, use parameterised queries rather than passing any values as part of the SQL command string directly - you leave your application wide open to SQL Injection attacks if you don't.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
A simpler method is to not pass InsertDate across at all. Instead, set it to use a default value of GETUTCDATE(), so whenever you insert a row, the UTC date will be applied. That way, you don't have to worry about calling the server functions.
This space for rent
|
|
|
|
|
I have a group code like RoleName_Entity_BUName I want to achieve the following syntax and I can work out how to put together the class syntax.
string sGroup = ClassOrMethodName(sGroupCodeVariable).RoleName;
Parsing the value of the group code into the 3 values is not a problem .
How can I construct a static class or method to achieve this syntax.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
Create a static class that contains a dictionary<string,string> with all of the possible group code variables and their corresponding role names. Then write a method called GetRollNameByGroupCode that returns the value (rolename) of the specified key (group code), or access the dictionary directly:
string sGroup = staticclass.dictionary[group code variable];
".45 ACP - because shooting twice is just silly" - JSOP, 2010
- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010
- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
|
|
|
|
|
As you are realising, you need to have a Class/Method combination to achieve what you want. Saying that, you can achieve a slightly similar syntax using any of the following techniques. First of all, let's assume that you have these elements to do the parsing:
public static class BuParser
{
public static BuEntity ParseElement(string value)
{
string[] breakdown = value.Split('_');
return new BuEntity()
{
Rolename = breakdown[0],
Entity = breakdown[1],
BusinessUnit = breakdown[2]
};
}
}
public class BuEntity
{
public string Rolename;
public string Entity;
public string BusinessUnit;
} Okay, given these classes, the first technique is to use extension methods. Something like this:
public static class Parser
{
public static BuEntity Parse(this object o, string role)
{
return BuParser.ParseElement(role);
}
public static BuEntity Parse(this string role)
{
return BuParser.ParseElement(role);
}
} Calling these would look like this:
string roleName = this.Parse("Developer_Admin_CodeProject").Rolename;
string businessUnit = "Developer_Admin_CodeProject".Parse().BusinessUnit; Now, there is another technique you could use - I would recommend not using it because it subverts syntax, but you could have
public class Parser2
{
public BuEntity this[string role]
{
get { return BuParser.ParseElement(role); }
}
} Calling that would look something like this:
string entity = new Parser2()["Developer_Admin_CodeProject"].Entity;
This space for rent
|
|
|
|
|
Yah it turned out to be a class/method with 3 overridden methods to return the Group/Entity/BU while passing in either a string or an enum.
The extension method seems interesting but not worth doing for this project - the class/method works perfectly
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
So you want to call a method from outside of its containing class, without specifying the class name?
Prior to C# 6, you can't. The closest you could get would be to use an extension method:
using YourNamespace;
...
string sGroup = sGroupCodeVariable.SomeExtensionMethod().RoleName;
With C# 6, you could use the using static syntax[^] to make all of the methods of your static class available without qualification:
using static YourNamespace.YourStaticClass;
...
string sGroup = YourStaticMethod(sGroupCode).RoleName;
However, I think this is generally a bad idea. It tends to make your code less readable. Plus, it's too close to VB's "Module" behaviour for comfort.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
modified 7-Sep-16 12:58pm.
|
|
|
|
|
The link to the Geeks With Blogs archive is broken; this works: [^].
btw, I agree with you that the C#6 "using static" namespace import syntax could, potentially, reduce code readability.
cheers, Bill
«There is a spectrum, from "clearly desirable behaviour," to "possibly dodgy behavior that still makes some sense," to "clearly undesirable behavior." We try to make the latter into warnings or, better, errors. But stuff that is in the middle category you don’t want to restrict unless there is a clear way to work around it.» Eric Lippert, May 14, 2008
|
|
|
|
|
It was working when I posted it. I think the hamsters stole the "x" from the end.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
I am working with vs2013 to develop a console apps. how to add localdb to db folder of my console project. Please tell me the way to add localdb in db folder of my project? thanks
tbhattacharjee
|
|
|
|
|
This is not a good question - we cannot work out from that little what you are trying to do.
Remember that we can't see your screen, access your HDD, or read your mind.
So try explaining in more detail exactly what you are trying to do, and why it's causing you a problem.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
What do you mean? Add an access database? That's easy. Copy one to your folder and then use a connection string.
Do you mean a sql database? Also easy, don't copy it to your folder, access it via the server and the proper connection string.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
|
Ah, probably.
There are only 10 types of people in the world, those who understand binary and those who don't.
|
|
|
|
|
I am trying to receive values from a listbox and make a string which separates the items by ","
The following code does the job, but instead of the items, i get "System.Data.DataRowView" over and over.
Here is my code:
string[] items = listBox1.Items.OfType<object>().Select(item => item.ToString()).ToArray();
string result = string.Join(",", items);
label1.Text = result;
|
|
|
|
|
"Trying to receive values from a listbox"?
Are you trying to use a listbox to transfer values from one part of your program to another? This is bad practice.
Controls should never be used as a transport mechanism for data. Controls, like a ListBox, are a conduit through which you display parts of your data model to the user and are also used to get data from the user.
Since you're not getting the list of selected items from a user this leads me to believe you're doing something you should not be doing while trying to manage your data model.
A ListBox manages its items using a ObjectCollection class, which is essentially just a List<object> . What you did, when you added items to the ListBox, is added a bunch of DataRowView objects to it. When the ListBox displays these items, it called .ToString() on each of them to get some kind of text to display.
To convert the items in this list to a list of strings, you need to get an appropriate value of a field in each DataRowView. What happens in your code is that the objects in the ListBox are all cast to Object, which really doesn't have any methods or properties on them. The default .ToString() implentation of Object just returns the underlying type name. That's where you're getting the "System.Data.DataRowView" string from.
In order to treat these objects as a type you can actually do something with, you have to cast the objects to the type you can work with, instead of .OfType<object> it should be .OfType<DataViewRow> . Now you've got the methods and properties of a DataViewRow object to work with and your Select() code can be changed to pick an appropriate field/property to get a value from and return an actual value string instead of the type name.
|
|
|
|
|
Thank you Dave for your fast replay
I will learn your answer and hope
to finish my project
|
|
|
|
|
You're on the right track!
string items = string.Join(",", listBox1.Items.OfType<string>().Select(o => o));
Do not forget about Dave's notes.
|
|
|
|
|
No need for the trailing .Select(o => o) - OfType<T> already returns an IEnumerable<T> .
And since you're using .NET 4.5, you don't really need the .OfType<string>() either. There's an overload of string.Join which takes an IEnumerable<T> , and converts each item to a string.
string items = string.Join(",", listBox1.Items.Cast<object>());
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Richard, i agree with you, but i feel in duty to explain why a OfType<string>() has been used in my code.
Well, OP wrote:
Quote: The following code does the job, but instead of the items, i get "System.Data.DataRowView " over and over.
You're suggesting to use Cast<object>() , because string.Join() method is able to convert object to string.
The differences between OfType() and Cast() are well known. Using OfCast() is always safer way. That's way that method is much slower than Cast() .
Cheers!
Maciej
Using Cast Or OfType Methods[^]
|
|
|
|
|
|
It's the note half a tone above C. It is also the name of the language Microsoft invented to go along with the .NET framework.
This space for rent
|
|
|
|