[英]c# database Select then insert. But the value is 0
I am trying to select then insert a datetime from Table 1 to Table 2. I have successfully insert the data. 我试图选择然后在表1到表2中插入一个日期时间。我已经成功插入了数据。 However, the datetime shown in Table 2 is 0000-00-00 00:00:00.
但是,表2中显示的日期时间为0000-00-00 00:00:00。 Idk where is the error.
idk错误在哪里。 Someone please help me with this problem.
有人请帮助我解决这个问题。 I am struggling with this.
我为此感到挣扎。 And is this the correct way to SELECT then insert ?
这是选择然后插入的正确方法吗? (Select from Table 1 then INSERT into Table 2)
(从表1中选择,然后插入表2)
try
{
string myConnectionString;
myConnectionString= "server=localhost;uid=root;pwd=root;database=medicloud;SslMode=None;charset=utf8";
MySqlConnection connection = new MySqlConnection(myConnectionString);
MySqlCommand cmd = new MySqlCommand();
cmd.CommandType = CommandType.Text;
EncodingProvider ppp;
ppp = CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(ppp);
connection.Open();
string select = "Select time from assign where userId=@name";
cmd.Parameters.AddWithValue("@name", txtValue.Text);
cmd.CommandText = select;
cmd.Connection = connection;
MySqlDataReader selectAssign = cmd.ExecuteReader();
selectAssign.Read();
string assign = (selectAssign["time"].ToString());
selectAssign.Close();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT into bluetooth (userId,arm,armNumberDone,armNumber,comDate,assignDate,status) VALUES (@name, @stupid0, @stupid1, @stupid2, @stupid3, @stupid4, @stupid5)";
cmd.Parameters.AddWithValue("@stupid0", databaseLine);
cmd.Parameters.AddWithValue("@stupid1", counter);
cmd.Parameters.AddWithValue("@stupid2", databaseValue);
cmd.Parameters.AddWithValue("@stupid3", DateTime.Now);
cmd.Parameters.AddWithValue("@stupid4", assign);
cmd.Parameters.AddWithValue("@stupid5", complete);
cmd.Connection = connection;
cmd.ExecuteNonQuery();
connection.Close();
}
catch (MySqlException ex)
{
txtExercise.Text = ex.ToString();
}
Please try with this 请尝试这个
try
{
string myConnectionString;
myConnectionString = "server=localhost;uid=root;pwd=root;database=medicloud;SslMode=None;charset=utf8";
MySqlConnection connection = new
MySqlConnection(myConnectionString);
MySqlCommand cmd = new MySqlCommand();
cmd.CommandType = CommandType.Text;
EncodingProvider ppp;
ppp = CodePagesEncodingProvider.Instance;
Encoding.RegisterProvider(ppp);
connection.Open();
string select = "Select time from assign where userId=@name";
cmd.Parameters.AddWithValue("@name", txtValue.Text);
cmd.CommandText = select;
cmd.Connection = connection;
MySqlDataReader selectAssign = cmd.ExecuteReader();
selectAssign.Read();
string assign = (selectAssign["time"].ToString());
selectAssign.Close();
DateTime assignDate = DateTime.Now;
DateTime.TryParseExact(assign, out assignDate);
cmd.CommandType = CommandType.Text;
cmd.CommandText = "INSERT into bluetooth
(userId,arm,armNumberDone,armNumber,comDate,assignDate,status) VALUES (@name,
@stupid0, @stupid1, @stupid2, @stupid3, @stupid4, @stupid5)";
cmd.Parameters.AddWithValue("@stupid0", databaseLine);
cmd.Parameters.AddWithValue("@stupid1", counter);
cmd.Parameters.AddWithValue("@stupid2", databaseValue);
cmd.Parameters.AddWithValue("@stupid3", DateTime.Now);
cmd.Parameters.AddWithValue("@stupid4", assignDate);
cmd.Parameters.AddWithValue("@stupid5", complete);
cmd.Connection = connection;
cmd.ExecuteNonQuery();
connection.Close();
}
catch (MySqlException ex)
{
txtExercise.Text = ex.ToString();
}
}
cmd.Parameters.AddWithValue("@stupid3", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"));
cmd.Parameters.AddWithValue("@stupid4", GetDateString(assign));
Have a method like this: 有这样的方法:
public static string GetDateString(string date)
{
DateTime theDate;
if (DateTime.TryParseExact(date, "dd/MM/yyyy HH:mm:ss",
CultureInfo.InvariantCulture, DateTimeStyles.None, out theDate))
{
// the string was successfully parsed into theDate
return theDate.ToString("dd/MM/yyyy HH:mm:ss");
}
else
{
// the parsing failed, return some sensible default value
return string.Empty;
}
}
You need to use .ExecuteReader()
the use .Read()
to move to each row in the result set. 您需要使用
.ExecuteReader()
和.Read()
移至结果集中的每一行。 If you are sure the exactly one row will be returned, use .ExecuteScalar()
instead. 如果您确定将只返回一行,请改用
.ExecuteScalar()
。 Research on the difference of both online. 研究两者在网上的区别。 Below is an example using
.ExecuteReader()
. 以下是使用
.ExecuteReader()
的示例。
I also re-wrote to use using
statements to simplify a bit but not deviate too much from your original code so you do not need to worry about closing and disposing resources since they inherit from IDisposable
and will do that automatically once they exit the using
block: 我还重写了使用
using
语句,以简化操作,但又不会与您的原始代码有太大差异,因此您不必担心关闭和处置资源,因为它们是从IDisposable
继承的,并且一旦退出using
块便会自动执行:
string assign = DateTime.Now.ToString();
string myConnectionString;
myConnectionString= "server=localhost;uid=root;pwd=root;database=medicloud;SslMode=None;charset=utf8";
string select = "Select time from assign where userId=@name";
using (MySqlConnection con = new MySqlConnection(myConnectionString))
{
using (MySqlCommand cmd = new MySqlCommand(select))
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
cmd.Parameters.AddWithValue("@name", txtValue.Text);
using (MySqlDataReader cursor = cmd.ExecuteReader())
{
while (cursor.Read())
{
assign = cursor["time"];
}
}
}
string insert = "INSERT into bluetooth (userId,arm,armNumberDone,armNumber,comDate,assignDate,status) VALUES (@name, @stupid0, @stupid1, @stupid2, @stupid3, @stupid4, @stupid5)";
using (MySqlCommand cmd = new MySqlCommand(insert))
{
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
cmd.Parameters.AddWithValue("@stupid0", databaseLine);
cmd.Parameters.AddWithValue("@stupid1", counter);
cmd.Parameters.AddWithValue("@stupid2", databaseValue);
cmd.Parameters.AddWithValue("@stupid3", DateTime.Now);
cmd.Parameters.AddWithValue("@stupid4", assign);
cmd.Parameters.AddWithValue("@stupid5", complete);
cmd.ExecuteNonQuery();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.