簡體   English   中英

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

[英]How to check if a row is present in SQL Server table or not?

我正在嘗試檢查SQL Server表中是否存在行。

如果該行存在(在特定的TicketID ),它應該顯示一個消息框,由於數據庫中已有條目,因此無法繼續進行。 但如果沒有,它應該插入一些記錄(在特定的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,我將不勝感激。

您應該在代碼中遵循與您用英語說明的邏輯相同的邏輯:如果已經有票證顯示消息,如果沒有,則插入一些數據。

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

請注意,這是寫在我腦海中而未經過測試。 我也沒有實現異常處理。 這只是為了展示如何執行您想要實現的目標的邏輯。

您可以使用HasRows財產SQLDataReader

只有在代碼拋出exception才會執行catch塊。 這里根本沒有發生。

代替Try / Catch使用if語句並檢查您的查詢結果。

像這樣創建過程和代碼

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您可以向用戶顯示消息

您可以使用DataTableReader.HasRows屬性

The HasRows property returns information about the current result set

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM