如何将文本框中的日期插入数据库

Posted

技术标签:

【中文标题】如何将文本框中的日期插入数据库【英文标题】:how to insert a date from textbox to database 【发布时间】:2012-03-02 16:06:20 【问题描述】:

请帮我将日期从 dd-mm-yyyy 格式的文本框中插入到 sql server。 我的代码如下:-

        int prio = Convert.ToInt32(Priority.Text);
        string stdate = planstart.Text;
        string endate= planend.Text;

        string actst = actualstart.Text;
        string acten = actualend.Text;



            SqlConnection myconnection = new SqlConnection(constring);
            SqlCommand mycommand = new SqlCommand();
            DataSet mydataset = new DataSet();
            SqlDataAdapter mydataadapter = new SqlDataAdapter();

            myconnection.Open();
            mycommand.Connection = myconnection;
            mycommand.CommandText = " insert into project_status.dbo.Project_Status_Report values('" + projectcode.Text + "','" + projectname.Text + "',(select P_Code from project_status.dbo.Project_Type where Project_Type = '" + projecttype.Text + "')," + prio + ",'" + stdate + "','" + endate + "','" + actst + "','" + acten + "','" + currentstatus.Text + "','" + remark.Text + "','no');";

            mycommand.CommandType = CommandType.Text;
            mycommand.ExecuteNonQuery();

它抛出一个异常说:- 从字符串转换日期和/或时间时转换失败。

【问题讨论】:

1) 查看参数化查询以保护自己免受 SQL 注入。 2)如果您的日期应该是日期,请不要将其视为字符串。验证它是一个有效的日期,对其进行转换,然后将其作为查询中的参数提供。 你能告诉我如何转换它吗?因为我尝试过但未能转换。 如果它比接受答案更有效...... 【参考方案1】:
 con.Open();
 string query = "insert_demo";
    /* date  fromat Stored*/
 TextBox2.Text = DateTime.Now.ToLongDateString();
 SqlCommand com = new SqlCommand(query, con);


 com.CommandType = CommandType.StoredProcedure;

 com.Parameters.AddWithValue("@Name", TextBox1.Text.ToString());
 com.Parameters.AddWithValue("@Date", TextBox2.Text.ToString());

 com.ExecuteNonQuery();

【讨论】:

【参考方案2】:

请注意 - 您需要清理该查询以防止 SQL 注入攻击。考虑使用参数化查询。阅读它,这不是这个答案的真正范围。

您应该首先创建强类型的 DateTime 对象,然后按照您需要插入的方式格式化它们。考虑对您的代码进行以下修改:

string stdate = DateTime.Parse(planstart.Text).ToString();
string endate = DateTime.Parse(planend.Text).ToString();

string actst = DateTime.Parse(actualstart.Text).ToString();
string acten = DateTime.Parse(actualend.Text).ToString();

编辑

我从 ToString() 中删除了字符串参数,因此您可以获得 SQL Server 可用的有效 DateTime 字符串。

【讨论】:

谢谢。但我仍然收到错误消息:-String 未被识别为有效的 DateTime。 那可能是您数据库上的区域设置。如果数据类型是日期时间,则需要实际传递一个 VALID 日期时间对象。它的显示格式取决于区域设置。考虑从 ToString() 方法中删除字符串参数 - 它应该考虑区域设置并返回有效的 DateTime 字符串。【参考方案3】:

您需要根据您的 sql server 格式转换数据,这样您才能解决问题..

试试

String UrDate = "27/12/2011"; 
System.Globalization.DateTimeFormatInfo dateInfo = new System.Globalization.DateTimeFormatInfo(); 
dateInfo.ShortDatePattern = "dd/MM/yyyy"; 
DateTime validDate= Convert.ToDateTime(toDate, dateInfo); 

Format String For Dates

// String to DateTime
 String MyString;
 MyString = "1999-09-01 21:34 PM";
 //MyString = "1999-09-01 21:34 p.m.";  //Depends on your regional settings

 DateTime MyDateTime;
 MyDateTime = new DateTime();
 MyDateTime = DateTime.ParseExact(MyString, "yyyy-MM-dd HH:mm tt",
                                      null);

利用参数化查询来避免 SQL INJECTION...减少代码错误 Walkthrough: Displaying Data in a Windows Form Using a Parameterized Query

【讨论】:

实际上我正在以 dd/mm/yyyy 格式获取日期。我已经尝试了上面的代码,但它抛出了一个异常,说字符串不在有效的日期格式中。因为我是新的我我不知道这些事情请帮助我。谢谢..

以上是关于如何将文本框中的日期插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

将文本框中的值插入 2 个不同的表 ms-access

由于“日期”列,无法将列表插入数据框中?

python如何在文本框中输入信息插入到数据库

如何将文本框上键入的数据从模态插入数据库

如何将 mysql 中的数据插入到组合框中?

如何使用命令按钮在文本框中的现有文本中插入新文本?