【发布时间】:2017-08-01 02:31:44
【问题描述】:
我已经坐在座位上一个多小时了,不知道出了什么问题。有人可以帮忙吗?
错误据说是“将字符串转换为DateTime时,在将每个变量放入DateTime对象之前解析字符串以获取日期。
字段名称“LastLoginTime”是我数据库中的 DATETIME 数据类型。
这些是代码..
protected void Page_Load(object sender, EventArgs e)
{
AuditNLoggingDAO al = new AuditNLoggingDAO();
int result = 0;
int resultLogout = 0;
DateTime dateTimeOfLatestLogin = DateTime.MinValue;
//Get IP Address of Client's Machine
String externalIP = null;
try
{
externalIP = (new WebClient()).DownloadString("http://checkip.dyndns.org/");
externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")).Matches(externalIP)[0].ToString();
}
catch (Exception ex)
{
logManager log = new logManager();
log.addLog("Retrieval of IP Address", "IP Address", ex);
}
if (!Page.IsPostBack)
{
if (!String.IsNullOrEmpty(Session["LoginUserName"].ToString()))
{
String loginUsername = Session["LoginUserName"].ToString();
//Get latest Login time
DataSet ds = new DataSet();
ds = al.getAuditData(Session["LoginUserName"].ToString());
foreach (DataRow r in ds.Tables[0].Rows)
{
dateTimeOfLatestLogin = Convert.ToDateTime(r["LastLoginTime"]);
}
result = al.trackLogout(loginUsername, DateTime.Now, externalIP, Convert.ToDouble(latitudeTB.Value), Convert.ToDouble(longitudeTB.Value));
resultLogout = al.updateLLogoutT(loginUsername, DateTime.Now, externalIP);
}
loginDetails.InnerText = "You logged into your account at " + dateTimeOfLatestLogin.ToString("hh:mm:ss tt dd/MM/yyyy") + " SGT.";
logoutDetails.InnerText = "You logged out from your session at " + (DateTime.Now).ToString("hh:mm:ss tt dd/MM/yyyy") + " SGT.";
}
}
我似乎无法找到错误.. 我猜这是我的 dateTimedateTimeOfLatestLogin 变量..
al.trackLogout 方法,
//Track Logout Activity
public int trackLogout(String username, DateTime dateTimeActivity, String ipaddress, Double latitude, Double longitude)
{
int result = 0;
StringBuilder sqlCmd = new StringBuilder();
sqlCmd.AppendLine("INSERT INTO AuditActivity (Username, DateTimeActivity, IPAddressActivity, LatitudeActivity, LongitudeActivity, ActivityType) ");
sqlCmd.AppendLine("VALUES (@addUsername, @addDT, @addIPAddress, @addLat, @addLng, @addActivity)");
try
{
SqlConnection myConn = new SqlConnection(DBConnectionStr);
myConn.Open();
SqlCommand cmd = new SqlCommand(sqlCmd.ToString(), myConn);
cmd.Parameters.AddWithValue("@addUsername", username);
cmd.Parameters.AddWithValue("@addDT", dateTimeActivity);
cmd.Parameters.AddWithValue("@addIPAddress", ipaddress);
cmd.Parameters.AddWithValue("@addLat", latitude);
cmd.Parameters.AddWithValue("@addLng", longitude);
cmd.Parameters.AddWithValue("@addActivity", "Logout");
result = cmd.ExecuteNonQuery();
myConn.Close();
return result;
}
catch (SqlException ex)
{
logManager log = new logManager();
log.addLog("AuditNLoggingDAO.trackLogout", sqlCmd.ToString(), ex);
return 0;
}
}
【问题讨论】:
-
你试过
dateTimeOfLatestLogin = (DateTime)r["LastLoginTime"]; -
将 LastLoginTime 放入监视窗口时会是什么样子?
-
如果我对此有所猜测,我认为您可能会遇到由于当前文化值而无法识别日期时间值的字符串格式的问题。我一直做日期时间转换的方式是使用 DateTime.ParseExact()。
-
@domster,
LastLoginTime的值是多少? -
@Mauricio 该值为 {31/07/2017 22:08:12}。
标签: c# sql asp.net string datetime