Aar*_*med 3 .net c# sql-server-2008 visual-c#-express-2010
将varchar数据类型转换为日期时间数据类型会导致超出范围的值错误
我正在尝试使用表单将数据输入到我的表中,表单验证和sql server中的日期格式都是dd/mm/yy,但是当我尝试从表单提交数据时,日期高于12 (例如13/12/2012)它抛出一个异常,其原因是"将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
Run Code Online (Sandbox Code Playgroud)
这是我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
Run Code Online (Sandbox Code Playgroud)
这是我门面的代码:
public void CreateProject(string name, DateTime startDate, DateTime endDate, int customerId, int administratorId)
{
dao.CreateProject(name, startDate, endDate, customerId, administratorId);
}//end CreateProject
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 11
基本上,您根本不应该将DateTime值作为字符串传递给SQL.使用参数化SQL,只需直接设置参数值.您应该始终尽可能使用参数化SQL:
此外,您的异常处理毫无意义.只需使用一个using声明,让SqlException泡沫直接起泡 - 为什么还要把它包裹在香草中Exception?
Bas*_*ran 11
您可以像sqldatetime一样进行sqldatetime转换
var sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32814 次 |
| 最近记录: |