【问题标题】: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)如果您的日期应该是日期,请不要将其视为字符串。验证它是一个有效的日期,对其进行转换,然后将其作为查询中的参数提供。
  • 你能告诉我如何转换它吗?因为我尝试过但未能转换。
  • 如果它比接受答案更有效......

标签: c# asp.net


【解决方案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 格式获取日期。我已经尝试了上面的代码,但它抛出了一个异常,说字符串不在有效的日期格式中。因为我是新的我我不知道这些事情请帮助我。谢谢..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2012-01-20
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多