C# 如何将mysql的datetime转换为asp.net的datetime

C# 如何将mysql的datetime转换为asp.net的datetime,c#,mysql,asp.net,C#,Mysql,Asp.net,我从mysql中名为lot的表中获取日期,并希望在mysql中名为soldlot的另一个表中插入相同的datetime值。怎么做?请帮忙 多谢各位 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

我从mysql中名为lot的表中获取日期,并希望在mysql中名为soldlot的另一个表中插入相同的datetime值。怎么做?请帮忙

多谢各位

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语句,或者至少简化为两步过程。

是否应该
d
DateTime
而不是
String
d.ToString(“yyyy-mm-dd”)
将使用分钟而不是月份,因为小写的
mm
表示分钟,大写字母
MM
表示月份,但更重要的是,使用参数,不要将日期作为字符串传递。您应该知道,您的代码容易受到sql注入的影响-而且
ExecuteScalar
只允许您返回一个值,这会使参数化的
限制
变得毫无意义。您在这两方面都错了。ASP.Net以二进制格式保存日期时间变量,这种格式不是人类可读的,并且只在调试器中或转换为字符串后显示该格式(您不应该对SQL执行此操作)。MySQL文档确实说日期类型是以这种格式检索的,但没有指定它的存储方式。为了提高效率,MySql可能正在做类似于ADO.Net的事情。无论如何,在MySQL和.Net之间传输数据的MySQL ADO.Net提供程序使用ASP.Net格式返回日期变量;System.InvalidCastException未经用户代码消息处理=指定的强制转换无效。您可能会返回NULL,但这并不重要:直接转到第二个代码段,这使得整个事情变得不必要。另外:Connector/Net文档中的这个页面可能很有用:非常感谢@Joel Coehoorn的帮助:)它可以工作。我第一次用c#编写代码,试图从互联网上学习它。谢谢你的指导。