c# - System.Data.SqlClient.SqlException:“将数据类型 nvarchar 转换为日期时出错。”
问题描述
我想分配培训记录时遇到此错误。我尝试了几件事,但没有进展 - 有人可以帮我解决这个问题吗?感谢您的辛勤工作,非常感谢您!
这是我的代码:
protected void ImgBtnDate_Click(object sender, ImageClickEventArgs e)
{
if(CalTrain.Visible)
{
CalTrain.Visible = false;
}
else
{
CalTrain.Visible = true;
}
CalTrain.Attributes.Add("style", "position:absolute");
}
protected void CalTrain_SelectionChanged(object sender, EventArgs e)
{
txtDate.Text = CalTrain.SelectedDate.ToString("dd/MM/yyyy");
CalTrain.Visible = false;
}
protected void CalTrain_DayRender(object sender, DayRenderEventArgs e)
{
if(e.Day.IsOtherMonth)
{
e.Day.IsSelectable = false;
e.Cell.BackColor=System.Drawing.Color.Red;
}
}
protected void lnkEdit_Click(object sender, EventArgs e)
{
int TrainID = Convert.ToInt32((sender as LinkButton).CommandArgument);
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("TrainViewByID", sqlCon);
sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
sqlDa.SelectCommand.Parameters.AddWithValue("@TrainID", TrainID);
DataTable dtbl = new DataTable();
sqlDa.Fill(dtbl);
sqlCon.Close();
hfTrainID.Value = TrainID.ToString();
txtDate.Text = dtbl.Rows[0]["TrainDate"].ToString();
DDLTrainProgram.Text = dtbl.Rows[0]["TrainProgram"].ToString();
DDLTrainTime.Text = dtbl.Rows[0]["TrainTime"].ToString();
DDLTrainVenue.Text = dtbl.Rows[0]["TrainVenue"].ToString();
btnAssign.Text = "Update";
btnDelete.Enabled = true;
}
protected void btnClear_Click(object sender, EventArgs e)
{
Clear();
}
public void Clear()
{
hfTrainID.Value = "";
txtDate.Text = "";
lblSuccessMessage.Text = lblErrorMessage.Text = "";
btnAssign.Text = "Assign";
btnDelete.Enabled = false;
}
protected void btnAssign_Click(object sender, EventArgs e)
{
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand("TrainCreateOrUpdate", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@TrainID", (hfTrainID.Value == "" ? 0 : Convert.ToInt32(hfTrainID.Value)));
sqlCmd.Parameters.AddWithValue("@TrainDate",DateTime.ParseExact(txtDate.Text,"dd/MM/yyyy",CultureInfo.InvariantCulture));
sqlCmd.Parameters.AddWithValue("@TrainProgram",DDLTrainProgram.Text.Trim());
sqlCmd.Parameters.AddWithValue("@TrainTime",DDLTrainTime.Text.Trim());
sqlCmd.Parameters.AddWithValue("@TrainVenue",DDLTrainVenue.Text.Trim());
sqlCmd.ExecuteNonQuery();
sqlCon.Close();
string TrainID = hfTrainID.Value;
Clear();
if (TrainID == "")
lblSuccessMessage.Text = "Assigned Successfully";
else
lblSuccessMessage.Text = "Updated Successfully";
FillGVTrain();
}
void FillGVTrain()
{
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
SqlDataAdapter sqlDa = new SqlDataAdapter("TrainViewAll", sqlCon);
sqlDa.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dtbl = new DataTable();
sqlDa.Fill(dtbl);
sqlCon.Close();
gvTrain.DataSource = dtbl;
gvTrain.DataBind();
}
protected void btnDelete_Click(object sender, EventArgs e)
{
if (sqlCon.State == ConnectionState.Closed)
sqlCon.Open();
SqlCommand sqlCmd = new SqlCommand("TrainDeleteByID", sqlCon);
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.Parameters.AddWithValue("@TrainID", Convert.ToInt32(hfTrainID.Value));
sqlCmd.ExecuteNonQuery();
sqlCon.Close();
Clear();
FillGVTrain();
lblSuccessMessage.Text = "Deleted Successfully";
}
}
因为这是一个插入-删除-更新功能。如果我使用上面提到的代码,它不能插入。但是,如果我使用代码
sqlCmd.Parameters.AddWithValue("@TrainDate", DateTime.ParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture));
它可以成功插入,但是在编辑详细信息时,我必须重新输入日期,因为它会发生另一个错误
System.FormatException:字符串未被识别为有效的 DateTime。
顺便说一句,我在 SQL Server 中分配的数据类型是date
。它无法像我想象的那样运行。作为一名学生,我是编程的新手。这些代码来自 Youtube 教程。
解决方案
你可以做
if (DateTime.TryParseExact(dtbl.Rows[0]["TrainDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate))
{
txtDate.Text = parsedDate;
}
但老实说,您为什么不使用 EntityFramework,它可以为您节省所有此类麻烦的时间。
推荐阅读
- react-native - 使用 Apollo 时如何设置 navigationOptions?
- php - 不使用 intdiv() 的整数(64 位)除法(php7 之前)
- java - 回调方法 Android
- php - 使用phpword将生成的pdf保存到mysql数据库
- html - 是否可以使用标题属性工具提示中不存在系统字体的语言?
- python - 如何在传递参数的同时从函数调用不同模块中的类?
- css - 使用 const 和“文本”对内联样式做出反应
- c - 在多线程应用程序的 c 语言中,clock() 如何计算时间?
- python - 如何将对象存储在动态生成的变量中?
- jupyter - jupyter笔记本的自定义css文件