新手在这里,我正在创建一个解析文本文件“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”给我一个整数输出“count”。 请帮助我谢谢。
答案 0 :(得分: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
并参数化您的查询。
答案 1 :(得分:0)
count(*)return int,你应该将reader.GetString(0)更改为reader.GetInt32(0)并在 if(reader == 0)to if(reader.GetInt32(0)== 0)并且它将起作用