【问题标题】:Inserting data after checking if table is empty检查表是否为空后插入数据
【发布时间】:2015-10-05 16:21:23
【问题描述】:

我有一个服务器程序,它将存储客户端发送的某些数据。一个数据是客户端的主机名。服务器将检查主机名是否存在,如果不存在,则插入该新数据。它应该是这样的。

hostname_id | hostname
------------------------
      1     | Admin
      2     | Guest_PC
      3     | Bob_PC2

我的问题是它不会存储新插入的数据。它继续返回零,但不存储任何内容。这是我的代码。(编辑为正确版本)

string constring = "Database=chtbuster;Data Source=localhost;User Id=root;Password=''";
    string count1 = "SELECT COUNT(hostName) FROM chtbuster.hostnametable WHERE hostName=@machineName ";
    using (MySqlConnection conDataBase = new MySqlConnection(constring))
    {
            MySqlCommand cmd1Database = new MySqlCommand(count1, conDataBase);
            conDataBase.Open();

             long count = (long)cmd1Database.ExecuteScalar();
             if (count == 0)
             {
                  string insert_ht = "INSERT INTO chtbuster.hostnametable(hostName) VALUES(@machineName);";
                  MySqlCommand cmd5Database = new MySqlCommand(insert_ht, conDataBase);

                  cmd5Database.Parameters.AddWithValue("@machineName", machineName);
                  cmd5Database.ExecuteNonQuery();
                  //*test* output.Text += "\n Empty " + count;
             }
             else
             {
                  //not empty, insert other data
             }

}

我以前编写过 PHP 数据库并且是 C# 数据库的新手,我很困惑。请帮忙。谢谢。

【问题讨论】:

  • 您需要执行您创建的 SQL 插入命令....DOH!
  • @SteveWellens 先生,我是 C# 数据库的新手。是 ExecuteNonQuery(); 吗?

标签: c# mysql .net database executescalar


【解决方案1】:

您可以使用 EXISTS 一步完成:

IF NOT EXISTS (SELECT hostName FROM chtbuster.hostnametable WHERE hostName=@machineName)
  INSERT INTO chtbuster.hostnametable(hostName_id) VALUES(@machineName);

如cmets中所说,需要执行查询才能得到结果。

【讨论】:

  • 先生?可以问我是否应该如何输出选定的查询吗? string gethostname_id = "SELECT INTO chtbuster.hostnametable(hostName_id) WHERE hostName=@machineName";
  • 在我的回答中,查询没有返回值。执行时,如果你想返回一个值,你可以使用 ExecuteScalar(就像你上面所做的那样),或者 ExecuteReader 来返回一个包含任何查询结果的数据读取器。
  • 如果你想封装你的逻辑并返回一些有意义的东西,也许在数据库中写一个存储过程。然后,您的逻辑不会硬编码在应用程序的某些 sql 中。
  • "封装你的逻辑" 我对封装不太了解,但我会尝试 ExecuteReader。谢谢。
猜你喜欢
  • 2012-11-25
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2021-03-08
  • 2017-11-15
  • 2014-04-15
相关资源
最近更新 更多