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(*) は int を返すので、reader.GetString(0) を reader.GetInt32(0) に変更し、if(reader==0) を if (reader.GetInt32(0)==0) に変更する必要があります。

于 2012-10-08T08:51:10.793 に答える