1

有没有更简单的方法来检查文本框中输入的值是否已经存在或不存在数据库中的字段?因为我觉得这有点复杂。提前致谢。

    public int method(string a)
    {
        string str;
        int chk = 1;
        con = new OracleConnection(constr);
        con.Open();
        try
        {
            com = new OracleCommand("select a from table where a='" + a + "'", con);
            OracleDataReader dr;
            dr = com.ExecuteReader();

            if (dr.Read())
            {
                str = dr["A"].ToString();
                if (str == a)
                    chk = 0;
                else
                    chk = 1;
            }
            else
                chk = 1;
            return chk;
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }

    }
4

2 回答 2

1

您可以使用 Read 来确定您是否得到完全匹配的查询,因为您已经检查了给定值是否存在于数据库表中。如果您至少获得一行,OracleDataReader.Read将返回。true

if (dr.Read())
   return 1;             
else     
    return 0;

如果有更多行,Read 返回 true;否则为假,参考

您可以将方法的返回类型更改为 bool 并简单地返回 read 的结果;

return dr.Read()
于 2013-11-15T09:45:56.683 回答
1

首先,不要串联。使用参数。由于您使用的 oracle 是:name语法,因此 IIRC。其次,您可以使用ExecuteScalar更简单,即

public bool RecordExists(string a)
{
    using(var con = new OracleConnection(constr))
    using(var cmd = con.CreateCommand())
    {
        cmd.CommandText = "select 1 from table where a=:a";
        cmd.Parameters.AddWithValue("a", a);
        con.Open();
        return cmd.ExecuteScalar() != null; // returns null if no rows
    }
}

但坦率地说,你也可以使用“dapper”之类的工具来简化它:

public bool RecordExists(string a)
{
    using(var con = new OracleConnection(constr))
    {
        return con.Query("select 1 from table where a=:a", new {a}).Any();
    }
}

(是的,我知道我什至没有Open()联系)

于 2013-11-15T09:49:38.593 回答