C#学习教程:将varchar数据类型转换为日期时间数据类型会导致超出范围的值错误分享


将varchar数据类型转换为日期时间数据类型会导致超出范围的值错误

将varchar数据类型转换为日期时间数据类型会导致超出范围的值错误

我正在尝试使用表单将数据输入到我的表中,表单validation和sql服务器中的日期格式都是dd / mm / yy,但是当我尝试从表单提交数据时,日期高于12 (例如13/12/2012)它抛出一个exception,其原因是“将varchar数据类型转换为日期时间数据类型导致超出范围的值错误”,如果我尝试在表单中输入数据以mm / dd / yy格式表示“错误的日期格式”,这意味着dd / mm / yy格式是正确的格式

这是我的表格的代码如下:

private void btnAddProject_Click(object sender, EventArgs e) { DateTime startDate; DateTime endDate; if (txtProjectName.Text == "") //client side validation { MessageBox.Show("Enter Project Name"); return; } try { startDate = DateTime.Parse(txtProjectStart.Text); endDate = DateTime.Parse(txtProjectEnd.Text); } catch (Exception) { MessageBox.Show("Wrong Date Format"); return; } fa.CreateProject(txtProjectName.Text, startDate, endDate, (int)cbCustomers.SelectedValue, ptsUser.Id); txtProjectName.Text = ""; txtProjectStart.Text = ""; txtProjectEnd.Text = ""; cbCustomers.SelectedIndex = 0; MessageBox.Show("Project Created"); adminControl.SelectTab(2); }// end btnAddProject 

这是我DAO中的代码:

 public void CreateProject(string name, DateTime startDate, DateTime endDate, int customerId, int administratorId) { string sql; SqlConnection cn; SqlCommand cmd; Guid projectId = Guid.NewGuid(); sql = "INSERT INTO Project (ProjectId, Name, ExpectedStartDate, ExpectedEndDate, CustomerId, AdministratorId)"; sql += String.Format("VALUES('{0}', '{1}', '{2}', '{3}', {4}, {5})", projectId, name, startDate, endDate, customerId, administratorId); cn = new SqlConnection(Properties.Settings.Default.WM75ConnectionString); cmd = new SqlCommand(sql, cn); try { cn.Open(); cmd.ExecuteNonQuery(); } catch (SqlException ex) { throw new Exception("Error Creating Project", ex); } finally { cn.Close(); } }//end CreateProject Method 

这是我门面的代码:

 public void CreateProject(string name, DateTime startDate, DateTime endDate, int customerId, int administratorId) { dao.CreateProject(name, startDate, endDate, customerId, administratorId); }//end CreateProject 

基本上,您不应该在SQL中将DateTime值作为字符串传递。 使用参数化SQL,只需直接设置参数值。 您应该始终尽可能使用参数化SQL:

此外,您的exception处理是毫无意义的复杂。 只需使用using语句,让SqlException直接冒泡 – 为什么还要把它包装成一个vanilla Exception呢?

您可以像sqldatetime一样进行sqldatetime转换

  var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss"); 

 sql = "INSERT INTO Project (ProjectId, Name, ExpectedStartDate, ExpectedEndDate, CustomerId, AdministratorId)"; sql += String.Format("VALUES('{0}', '{1}', '{2}', '{3}', {4}, {5})", projectId, name, startDate.toString("dd-MMM-yyyy"), endDate.toString("dd-MMM-yyyy"), customerId, administratorId); 

建议:为什么在代码中使用Insert语句? 您可以改为使用存储过程。

上述就是C#学习教程:将varchar数据类型转换为日期时间数据类型会导致超出范围的值错误分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1031832.html

发表评论

邮箱地址不会被公开。 必填项已用*标注