2

新手,我目前正在创建一个工具,它将解析包含名称的文本文件“namelist.txt”。我的工具将检查每个名称是否已经在我的数据库中。如果不存在,它将写入另一个文件“new_name.log”。

我的代码是这样的。

在我的查询命令中,我使用 count(*) 返回计数

            string DBNAME= "SELECT count(*) FROM tbl_namelist WHERE name = '" + name + "'";
            conn.Open();
            MySqlCommand DBCmd = new MySqlCommand(DBNAME, conn);
            MySqlDataReader reader = DBCmd.ExecuteReader();
            while (reader.Read())
            {

               if (reader == 0)
                try
                {
                    //label2.Text = reader.GetString(0);
                    sds.WriteLine("New Name: " + name+ " " + reader.GetString(0));
                }
                catch (Exception dd)
                {

                    sds.WriteLine("duplicate Name: " + name+ " " + reader.GetString(0));
                }

我不知道我是否阅读了正确的信息“reader.read”给我一个整数输出“计数”。请帮助我谢谢。

4

2 回答 2

2

不要使用MySQLDataReader而是使用命令ExecuteNonScalar来获取单个值。

string DBName = "SELECT count(*) FROM tbl_namelist WHERE name = @name";
using (MySqlConnection conn = new MySqlConnection("connectionString Here"))
{
    using (MySqlCommand comm = new MySqlCommand())
    {
        comm.Connection = conn;
        comm.CommandText = DBName;
        comm.CommandType = CommandType.Text;
        comm.Parameters.AddWithValue("@name", name);
        try
        {
            conn.Open();
            int totalCount = Convert.ToInt32(comm.ExecuteScalar());
            if (totalCount == 0)
            {
                sds.WriteLine("New Name: " + name + " " + totalCount);
            }
            else
            {
                // when not zero
            }
        }
        catch( MySqlException ex)
        {
            // error here
        }
    }
}

使用USING-statement并参数化您的查询。

于 2012-10-08T08:40:08.950 回答
0

count(*) return int 并且您应该将 reader.GetString(0) 更改为 reader.GetInt32(0) 并将 if(reader==0) 更改为 if (reader.GetInt32(0)==0) 并且它将起作用

于 2012-10-08T08:51:10.793 回答