我正面临更新我的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中获取的日期格式。请帮忙。
答案 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