如何检查数据库中是否已存在该值?

时间:2013-11-15 09:43:09

标签: c# asp.net oracle

是否有更简单的方法来检查文本框中输入的值与数据库中的字段是否已存在?因为我发现这有点复杂。提前谢谢。

    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);
        }

    }

2 个答案:

答案 0 :(得分:1)

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

if (dr.Read())
   return 1;             
else     
    return 0;
  如果有更多行,

Read返回true;否则,假,Reference

您可以将方法的返回类型更改为bool,只返回读取结果;

return dr.Read()

答案 1 :(得分:1)

首先,不要连接。使用参数。因为您正在使用:name语法的oracle,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()连接)

相关问题