如何使用asp.net将输入类型日期插入mysql

时间:2017-04-15 20:34:26

标签: c# jquery mysql asp.net materialize

我正面临更新我的sql表的问题。我正在使用materializecss,因为我必须使用

 <div class="input-field col l6 s12 m6">
                                    <input type="date" id="DOB" class="datepicker"/>
                                    <label for="DOBLBL">DATE OF BIRTH</label>
                                </div>

jquery: $('.datepicker').pickadate({ selectMonths: true, // Creates a dropdown to control month selectYears: 15, // Creates a dropdown of 15 years to control year format: 'mm/dd/yyyy' });

C#

 string dob = String.Format("{0}", Request.Form["DOB"]);
            string jd = String.Format("{0}", Request.Form["JD"]);
            String userName = Convert.ToString(Session["username"]);
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            MySqlConnection con = new MySqlConnection(constr);
            MySqlCommand com = new MySqlCommand("userDetails", con);
            com.CommandType = CommandType.StoredProcedure;
            MySqlParameter p1 = new MySqlParameter("nickName", nickNameTB.Text);
            MySqlParameter p2 = new MySqlParameter("dob", dob);
            MySqlParameter p3 = new MySqlParameter("joinDt", jd);
            MySqlParameter p4 = new MySqlParameter("memType", memTtype);
            MySqlParameter p5 = new MySqlParameter("usrname", userName);

            com.Parameters.Add(p1);
            com.Parameters.Add(p2);
            com.Parameters.Add(p3);
            com.Parameters.Add(p4);
            com.Parameters.Add(p5);

            con.Open();
            com.ExecuteNonQuery();

我创建的例程

CREATE DEFINER=`root`@`localhost` PROCEDURE `userDetails`(IN `nickName` VARCHAR(15), IN `dob` DATE, IN `joinDt` DATE, IN `memType` INT(3), IN `usrname` VARCHAR(15))
NO SQL
update ozi_members
SET memberNickName = nickName,
memberDob = dob,
memberJoinDate = joinDt,
memberType = memType
WHERE memberUsername = usrname

我尝试了程序,它运行正常。所以我认为问题在于我从datepicker中获取的日期格式。请帮忙。

2 个答案:

答案 0 :(得分:0)

如果您的字段是Date类型,那么您应该传递Date类型的参数 如果传递一个字符串,那么数据库引擎需要将其转换为字段所需的日期。日期不是字符串,并且此处始终存在转换。这种转换可能有效,但为什么要这样呢?只需创建指定类型的参数并传递正确类型的参数值

DateTime dob = Convert.ToDateTime(Request.Form["DOB"]);
DateTime jd = Convert.ToDateTime(Request.Form["JD"]);
....
using(MySqlConnection con = new MySqlConnection(constr))
using(MySqlCommand com = new MySqlCommand("userDetails", con))
{
    com.CommandType = CommandType.StoredProcedure;
    MySqlParameter p1 = new MySqlParameter("nickName", MySqlDbType.VarChar).Value = nickNameTB.Text;
    MySqlParameter p2 = new MySqlParameter("dob", MySqlDbType.Date).Value = dob;
    MySqlParameter p3 = new MySqlParameter("joinDt", MySqlDbType.Date).Value = jd;
    ....
    con.Open();
    com.ExecuteNonQuery();
}

另请注意,连接和命令应该包含在using语句中,以便正确处理这些对象并避免资源泄漏。

(初始Convert.ToDateTime假定您的Request.Form变量的格式正确,可能是在客户端验证的日期。如果没有,那么您应该使用DateTime.TryParse并在输入无法转换时给出相应的消息到DateTime变量)

答案 1 :(得分:0)

在您的存储过程中,不要将参数括在单引号中,因为它不会被视为参数而是被视为值。试试这个:

CREATE DEFINER=`root`@`localhost` PROCEDURE `userDetails`(IN @nickName VARCHAR(15), 
IN @dob DATE, IN @joinDt DATE, IN @memType INT(3), IN @usrname VARCHAR(15))
# rest of code

然后从应用程序端对C#代码进行这些更改:

MySqlParameter p1 = new MySqlParameter("@nickName", nickNameTB.Text);
// Other parameters