我正在从 mysql 中名为 lot 的表中的字符串中获取日期,并希望将相同的日期时间值插入到 mysql 中名为 selllot 的另一个表中。怎么做?请帮忙。
谢谢
String q6 = "select date from lot LIMIT " + m + "," + n + "";
MySqlCommand c6 = new MySqlCommand(q6, cn);
String d = (String)(c6.ExecuteScalar());
String q7 = "insert into sold values(" + lotno + "," + c + "," + rcno + ",'" + d.ToString("yyyy-mm-dd") + "')";
MySqlCommand c7 = new MySqlCommand(q7, cn);
c7.ExecuteScalar();
最佳答案
首先,让我们修复此问题以使用参数:
//I'm less worried about this query, as m and are likely integers.
// I still don't approve of the string concatenation, but I'll leave it alone for now
String q6 = "select date from lot LIMIT " + m + "," + n + "";
MySqlCommand c6 = new MySqlCommand(q6, cn);
DateTime d = (DateTime)c6.ExecuteScalar(); //This should work just fine.
//but parameters are VERY IMPORTANT for this query
String q7 = "insert into sold values( @LotNo, @c, @rcno, @date );";
MySqlCommand c7 = new MySqlCommand(q7, cn);
//I'm guessing at column types. Use actual DB column types and lengths here
c7.Parameters.Add("@LotNo", MySqlDbType.VarChar, 6).Value = lotno;
c7.Parameters.Add("@c", MySqlDbType.VarChar, 20).Value = c;
c7.Parameters.Add("@rcno", MySqlDbType.VarChar, 6).Value = rcno;
c7.Parameters.Add("@date", MySQlDbType.Date).Value = d;
c7.ExecuteNonQuery();
此更改将修复代码中非常严重的安全问题,并且作为一个很好的副作用,还可以避免考虑日期格式,从而同时回答您的问题。
但是,当我在这里的时候,让我们对此做出另一项重大改进。让我们保存到数据库的整个往返,并将两个查询合并为一个:
String q6 = "insert into sold select @LotNo, @c, @rcno, date from lot LIMIT @m , @n;";
MySqlCommand c6 = new MySqlCommand(q6, cn);
//I'm guessing at column types. Use actual DB column types and lengths here
c6.Parameters.Add("@LotNo", MySqlDbType.VarChar, 6).Value = lotno;
c6.Parameters.Add("@c", MySqlDbType.VarChar, 20).Value = c;
c6.Parameters.Add("@rcno", MySqlDbType.VarChar, 6).Value = rcno;
c6.Parameters.Add("@m", MySqlDbType.Int).Value = m;
c6.Parameters.Add("@n", MySqlDbType.Int).Value = n;
c6.ExecuteNonQuery();
如果第一次尝试没有解决您的日期转换问题,那么现在日期根本不需要传输到 ASP.Net,而且作为奖励,这将快得多 .
最后,我担心您的 q 和 c 变量已经达到#7。这对我来说是一个主要的代码味道。始终尝试减少数据库的往返次数。最有可能的是,此方法中的所有内容都可以编写为单个 SQL 语句,或者至少简化为两步过程。
关于c# - 如何将mysql的日期时间转换为asp.net的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26999445/