如何将文本框中的日期插入数据库
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 格式获取日期。我已经尝试了上面的代码,但它抛出了一个异常,说字符串不在有效的日期格式中。因为我是新的我我不知道这些事情请帮助我。谢谢..以上是关于如何将文本框中的日期插入数据库的主要内容,如果未能解决你的问题,请参考以下文章