是否有更简单的方法来检查文本框中输入的值与数据库中的字段是否已存在?因为我发现这有点复杂。提前谢谢。
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);
}
}
答案 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()
连接)