我正在尝试从角获取数据并使用C#通过WebAPI将其保存在数据库中。现在我在转换DOB时遇到问题,我得到了这个错误
“字符串未被识别为有效的datetime”
角度日期格式:“Wed Jan 05 2022 00:00:00 GMT 0530(印度标准时间)”
数据库日期格式:“YYYY-MM-DD”
现在需要转换成这种格式。
string dob = httprequest.Form.Get("dob");
MySqlConnection myConnection = new MySqlConnection();
myConnection.ConnectionString = @"Data Source=localhost; Database=pramod; User ID=itesuser; password=ites; Port=3309";
MySqlCommand sqlCmd = new MySqlCommand();
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "Insert Into emp_ang (DOB) Values (@dob)";
sqlCmd.Connection = myConnection;
DateTime birth = DateTime.ParseExact(dob, "yyyy/MM/dd", CultureInfo.InvariantCulture);
sqlCmd.Parameters.AddWithValue("@dob", birth);
myConnection.Open();
int rowInserted = sqlCmd.ExecuteNonQuery();
myConnection.Close();
return Ok("inserted");
首先,我很高兴看到您没有尝试将您的DateTime
保存为数据库中的string
。永远不要因为选择错误的数据类型而困住自己。MySQL有DATE
和DATETIME
类型,请选择适合您需求的类型。
让我们看看你的字符串:“Wed Jan05 2022 00:00:00GMT 0530(印度标准时间)”
没有内置的方法来解析中的时区名称。网因此,最好删除字符串中的时区名称-(印度标准时间)部分。
假设我们有:"Wed Jan05 2022 00:00:00GMT 0530"
我们仍然有“GMT”,并且仍然没有办法在不操作您的字符串或将其作为自定义部分放入您的格式的情况下解析它。您可以使用zzz
自定义格式说明符解析您的UTC偏移部分。最后一件事,由于您的字符串具有UTC Offset,因此最好将其解析为DateTimeOffset
而不是System. DateTime
。
var dob = "Wed Jan 05 2022 00:00:00 GMT+0530";
var birth = DateTimeOffset.ParseExact(dob,
"ddd MMM dd yyyy HH:mm:ss 'GMT'zzz",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
现在我们将2022年1月5日12:00:00 AM 05:30作为出生变量。您甚至可以使用它的。LocalDateTime
,。日期时间
或。UtcDateTime属性,它取决于您在数据库中保存的值。
除此之外,还有一些需要考虑的事情;
使用
语句自动释放您的连接和命令,因为它们是IDisposable
。AddSusValue
方法。它可能会产生意想不到的结果。使用.Add()
方法或它的重载。喜欢
using(var myConnection = new MySqlConnection(connectionString))
using(var sqlCmd = myConnection.CreateCommand())
{
// Creater your command
// Add your parameter and it's value
// Open your connection
// Execute your query
}