C# c数据库选择然后插入。但是这个值是0

C# c数据库选择然后插入。但是这个值是0,c#,mysql,sql,database,C#,Mysql,Sql,Database,我试图从表1到表2选择并插入一个日期时间。我已成功插入数据。但是,表2中显示的日期时间是0000-00-00:00:00。Idk哪里是错误。谁来帮我解决这个问题。我正在努力解决这个问题。这是选择然后插入的正确方法吗?从表1中选择,然后插入表2中 try { string myConnectionString; myConnectionString= "server=localhost;uid=root;pwd=root;database=mediclou

我试图从表1到表2选择并插入一个日期时间。我已成功插入数据。但是,表2中显示的日期时间是0000-00-00:00:00。Idk哪里是错误。谁来帮我解决这个问题。我正在努力解决这个问题。这是选择然后插入的正确方法吗?从表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();
    }
有这样一种方法:

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;
    }
}
请试试这个

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();
  }
}
您需要使用.ExecuteReader来移动到结果集中的每一行。如果您确定将只返回一行,请改用.ExecuteScalar。研究两者在网上的差异。下面是一个使用.ExecuteReader的示例

我还重新编写了使用using语句来简化一些,但不要与原始代码偏离太多,这样您就不必担心关闭和处理资源,因为它们继承自IDisposable,并且在退出using块后会自动执行:


为什么要分配字符串而不是日期时间?可能不是解决方案,但:字符串分配后=选择分配[time].ToString;,变量赋值的值是多少?是否添加了要检查的断点?我尚未检查。我现在会检查它我现在可以运行调试了。但是当我在字符串赋值行添加一个断点时,我按F11。切换断点向下移动。这正常吗?您的行应该是string assign=DateTime.Now.ToString?尽管如此,它仍然显示0000-00-00:00:00:它在TryParseExact上有一个错误。它说“TryParseExact”方法不需要重载2个参数。我改为使用TryParse,效果非常好:感谢您的帮助。一些额外的提示:MySqlConnection、MySqlCommand和MySqlDataReader都是IDisposable的,所以都应该使用块。另外,看一看。
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();
  }
}
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();
    }
}