如何检查SQL Server表中是否存在行?

时间:2014-02-20 13:29:18

标签: c# sql sql-server

我正在尝试检查SQL Server表中是否存在行。

如果该行存在(在特定的TicketID上),它应该显示一个消息框,由于数据库中已存在条目,因此无法继续。但如果没有,则应插入一些记录(特定于TicketID)。

我试过尝试捕捉但是无法做到:

以下是查询代码:(例如,硬编码ticketID

bool no;

try
{
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ST"].ConnectionString.ToString());
    con.Open();
    cmd.CommandText = "SELECT EngineerVisited from tblTicketTechnical where TicketID=1";
    cmd.Connection = con;
    rdr = cmd.ExecuteReader();

    while (rdr.Read())
    {
        bool = rdr.GetBoolean(0);
    }

    con.Close();
}
catch
{
    MessageBox.Show("Cannot continue");
}

我真的很感激,如果有人可以建议一个函数,如果找到了行则返回true,如果不是则返回false。

5 个答案:

答案 0 :(得分:3)

您应该在代码中遵循与您用英语说明的逻辑相同的逻辑:如果已经有票证显示消息,如果没有,请插入一些数据。

var checkQuery = "SELECT COUNT(*) FROM tblTicketTechnical where TicketID=1";
var command = new OleDbCommand(checkQuery, con);

con.Open();
int count = (int)command.ExecuteScalar();

if(count > 0)
{
    //Already exists, show message
}
else
{
    var insertQuery = "INSERT INTO tblTicketTechnical(col1, col2) VALUES('val1', val2')";
    con = new OleDbCommand(insertQuery, con);
    con.ExecuteNonQuery();
}

请注意,这是写在我脑海中而未经过测试。我也没有实现异常处理。这只是为了向您展示如何执行您想要实现的目标的逻辑。

答案 1 :(得分:2)

您可以使用SQLDataReader的{​​{3}}属性。

答案 2 :(得分:1)

只有在您的代码抛出catch时才会执行exception块。这里根本没有发生。

而不是Try / Catch使用if语句并检查您的查询结果。

答案 3 :(得分:1)

像这样创建程序和代码

IF NOT EXISTS (SELECT 1 FROM youtable WHERE id= @id)
   BEGIN
      RAISERROR ('Record Exists', 16, 2)
   END
ELSE
   Begin
      INSERT INTO YOURTABEL(COLUM1,COLUM2) VALUES(VALUE1, VALUE2)
   END

然后通过try catch您可以向用户显示消息

答案 4 :(得分:0)

您可以使用DataTableReader.HasRows Property

The HasRows property returns information about the current result set