Sql server没有从文本框中接受日期

时间:2013-12-12 06:01:48

标签: c# sql-server datetime

我无法从DD / MM / YYYY格式的文本框中插入日期。 我在Windows 7上使用Visual Studio 2008。

我的语言和地区设置为“ENGLISH(英国)”,我的系统显示今天的日期,如2013年12月12日。我通过表单On load event在文本框中输入的日期相同。

private void Form1_Load(object sender, EventArgs e)
{
   textBox1.Text = DateTime.Now.ToShortDateString();
}

导致12/12/2013。

我在表“Table1”中放置了一个按钮来存储日期,其中只包含一个字段Date,其数据类型为DATETIME。单击事件包含以下行。

SqlConnection c = new SqlConnection();
c.ConnectionString ="Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\Documents\\Visual Studio 2008\\Projects\\test\\test\\Database1.mdf';Integrated Security=True;User Instance=True";
c.Open();
DateTime d;
d = Convert.ToDateTime(textBox1.Text);
string q = "insert into table1 values('" + d + "')";
SqlCommand cmd = new SqlCommand(q, c);
cmd.ExecuteNonQuery();
MessageBox.Show("record inserted");

每当我编辑日期时说今天是12/12/2013(DD / MM / YYYY)并且我输入了13/12/2013,它显示错误Sql异常是unhandeled。

将char数据类型转换为datetime数据类型会导致日期时间值超出范围。 声明已经终止。

当我输入12/13/2013(MM / DD / YYYY)时

它显示String未被识别为有效的DateTime。

任何建议朋友.. ???

4 个答案:

答案 0 :(得分:3)

您应该使用适当的参数而不是连接字符串:

    string q = "insert into table1 values (@dateparam)";
    SqlCommand cmd = new SqlCommand(q, c);
    cmd.Parameters.AddWithValue("@dataparam", d);
    cmd.ExecuteNonQuery();

这将帮助您进行类型转换以及减轻SQL注入。

答案 1 :(得分:0)

使用此

d=DateTime.ParseExact(text, "dd/MM/yyyy hh:mm", CultureInfo.InvariantCulture);

C# DateTime.ParseExact

Parse string to DateTime in C#

希望这有帮助

答案 2 :(得分:-1)

您的代码:

d = Convert.ToDateTime(textBox1.Text);

将d作为System.DateTime数据类型。如果您希望格式为mm / dd / yyyy - 您必须将其转换回格式为

的字符串

代表:

string q = "insert into table1 values('" + d.ToString("MM/dd/yyyy") + "')"; 

在我看来 - 您不必将文本框转换为日期时间,尤其是当您的sql数据类型是日期时间时。如果你这样做进行验证 - 那么你应该在文本框中验证文本的格式。

答案 3 :(得分:-1)

只需更改您的代码,

Convert.ToDateTime(textbox.text, CultureInfo.InvarientCulture);

或在“site.Master.cs”页面加载事件中添加此内容。

//将日期时间格式覆盖为“dd-MM-yyyy”(在Site Master中)

            CultureInfo cl = (CultureInfo)CultureInfo.CurrentCulture.Clone();
            cl.DateTimeFormat.ShortDatePattern = "dd-MM-yyyy";
            cl.DateTimeFormat.LongTimePattern = "";
            Thread.CurrentThread.CurrentCulture = cl;

现在您可以像这样使用您的代码..

Convert.ToDateTime(textbox.text, CultureInfo.CurrentCulture); 现在,如果您在任何本地服务器上发布代码,它将超过日期格式“dd-MM-yyyy”。