|
You don't need a database just because you want to write a web app, they can use the file system too (only within the IIS web root but that is fine).
|
|
|
|
|
|
Uh, just use the System.IO classes like you would in a normal application, and make sure that you're looking in a folder for which you have set up permissions,
|
|
|
|
|
Ok so I was right, you need a record in the database with the filename and the filename needs to unique across multiple users - therefore the GUID (or in my case the numeric ID).
It still comes down to design of your app. Your user needs to be able to decide if he wants to manage an existing image and selects that image from a list/control in which case YOU know the record (you used it to populate the control/list) or upload a new image. Change you viewpoint from the user magicking in an image to managing your data.
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
I'm letting the users to upload the image so I need to store it in the virtual directory as well as the database. But there is error with my virtual directory -
'D:/Virtual Directory is a physical path, but a virtual path was expected.
if (@File.Exists(Server.MapPath("D:/Virtual Directory")))
How do I solve this error?
|
|
|
|
|
Greeting Gurus,
More fun with datetime...
The question:
How do you convert the string 20110325 to a datetime with a "yyyy-mm-dd" format?
The goal:
Convert a retrieved string value into a datetime for insertion in to a sql db.
The output:
20110325
System.FormatException: String was not recognized as a valid DateTime (etc.)
The code:
RegistryKey Regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
{
if (Regkey != null)
{
foreach (string subKeyName in Regkey.GetSubKeyNames())
{
RegistryKey subKey = Regkey.OpenSubKey(subKeyName);
string oDate = subKey.GetValue("InstallDate",String.Empty).ToString();
Console.WriteLine(oDate);
DateTime nDate = DateTime.Parse(oDate);
if (!String.IsNullOrEmpty(oDate))
{
Console.WriteLine(nDate.ToShortDateString());
}
subKey.Close();
}
Regkey.Close();
}
}
If I use
DateTime nDate;
nDate = DateTime.TryParse(oDate, out nDate);
I get "Cannot implicitly convert type 'bool' to 'System.DateTime'"
I have also tried the TryParseExact & ParseExact methods and met with failure.
|
|
|
|
|
CCodeNewbie wrote: If I use
DateTime nDate;
nDate = DateTime.TryParse(oDate, out nDate);
I get "Cannot implicitly convert type 'bool' to 'System.DateTime'"
I have also tried the TryParseExact & ParseExact methods and met with
failure.
That's because TryParse returns a bool => true on success and false otherwise.
Use something like
bool b = DateTime.TryParse(oDate, out nDate);
Then you'll have the value in nDate cause it's an out parameter.
All the best,
Dan
|
|
|
|
|
Hi Dan,
I had tried something similar...
DateTime nDate;
bool b = DateTime.TryParse(oDate, out nDate);
{
Console.WriteLine(nDate);
}
but the dates are converted to 01/01/0001.
I am currently thinking I need to format oDate first...
|
|
|
|
|
You may need to use this method[^] which allows you to tell the parser the format of the string.
|
|
|
|
|
Hi Richard,
Same problem. Dates show as 01/01/0001 00:00:00.
RegistryKey subKey = Regkey.OpenSubKey(subKeyName);
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
CultureInfo culture;
DateTimeStyles styles;
DateTime nDate;
culture = CultureInfo.InstalledUICulture;
styles = DateTimeStyles.None;
DateTime.TryParse(oDate, culture, styles, out nDate);
Console.WriteLine(nDate);
|
|
|
|
|
I used:
culture = CultureInfo.CurrentCulture;
styles = DateTimeStyles.AssumeLocal;
but I also had to ensure the date was in the format of the local style. If you wish to use a non-standard representation of the date then you need to provide your own implementation of the IFormatProvider[^] interface.
Alternatively, since you know this date is YYYYMMDD you could just split it into its constituent parts and recreate it in the default format for your culture.
|
|
|
|
|
Either use the method as Richard said or make up your own conversion logic,
given that you know that the date in string fromat will always be like "YYYYMMDD" or what have you.
All the best,
Dan
|
|
|
|
|
If you know you are always going to get back date in a particular format, though as a string, for e.g. 20110325, you can insert date separators on your own.
Simply insert separators at the end of the fourth and sixth character and then you can use Convert.ToDate , TryParse or any other method you like on this string.
|
|
|
|
|
As it represents a date/time, it should be a DateTime type. Please don't advise people to perform string operations on objects that represent numbers, DateTime.Parse/TryParse/ParseExact/TryParseExact are easy enough to do it right.
|
|
|
|
|
You can also use the ParseExact[^] method for which you can specify the date format of the string to be parsed.
CultureInfo provider = CultureInfo.InvariantCulture;
DateTime.ParseExact(oDate, "yyyyMMdd", provider);
0100000101101110011001000111001011101001
|
|
|
|
|
Snap!
There is also TryParseExact as well.
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
Something else I've learned today.
|
|
|
|
|
I hope the other was rather more interesting!
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
It would struggle to be less so!
|
|
|
|
|
Hi André
Tried that too... "01/01/0001".
I think the problem is that the parser doesn't recognise 20110325 as a date
If I do this
DateTimeFormatInfo myDTFI = new DateTimeFormatInfo();
myDTFI.DateSeparator = string.Empty;
myDTFI.FullDateTimePattern = "yyyymmdd";
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
DateTime nDate = DateTime.ParseExact(oDate,"yyyymmdd", null);
Console.WriteLine(oDate);
Console.WriteLine(nDate);
I get this
20110325
25/01/2011 00:03:00
System.FormatException: String was not recognized as a valid DateTime.
|
|
|
|
|
Use 'MM' instead of 'mm'.
'MM' is for months and 'mm' is for minutes.
0100000101101110011001000111001011101001
|
|
|
|
|
Try:
string strDate = "20110325";
DateTime date = DateTime.ParseExact(strDate, "yyyyMMdd", CultureInfo.InvariantCulture); or
string strDate = "20110325";
DateTime date = new DateTime();
if (DateTime.TryParseExact(strDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
...
}
Ideological Purity is no substitute for being able to stick your thumb down a pipe to stop the water
|
|
|
|
|
RegistryKey Regkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
{
if (Regkey != null)
{
foreach (string subKeyName in Regkey.GetSubKeyNames())
{
RegistryKey subKey = Regkey.OpenSubKey(subKeyName);
string oDate = subKey.GetValue("InstallDate", String.Empty).ToString();
if (!String.IsNullOrEmpty(oDate))
{
DateTime date = new DateTime();
if (DateTime.TryParseExact(oDate, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
Console.WriteLine(date);
}
subKey.Close();
}
produces 25/03/2011 00:00:00
Thanks to everyone for their time
|
|
|
|
|
CCodeNewbie wrote: How do you convert the string 20110325 to a datetime with a "yyyy-mm-dd" format?
Very carefully.
There reason for that of course is because you do not have a "date time".
You have a date.
And there is a difference because a date time has a timezone. Where a date probably doesn't. Or maybe it does. But that is where the 'care' part comes in.
|
|
|
|
|
Good points. C# (or, I should say, the .Net Framework) doesn't have a Date class, though, so he does mean DateTime. It looks like the date is in the same time zone as the application so he shouldn't have an issue with that.
|
|
|
|