簡體   English   中英

如何獲取C#中更新的記錄的ID

[英]how to get the ID of the record that is update in C#

我能夠得到一個 sql 查詢,它可以返回數據庫中更新的記錄的 ID; 需要該 ID 來更新其他記錄。

public int updateCases(int id,string fname)
{
 string query="update bio_data set firstName=@fname OUTPUT INSERTED.ID where id=@ID";
    int IDValue = 0;
    try
    {
        con.Open();
        SqlCommand cmd = new SqlCommand(query, con);
        cmd.Parameters.AddWithValue("@ID",id);
        cmd.Parameters.AddWithValue("@fname",fname);
        
        IDValue = Convert.ToInt32(cmd.ExecuteNonQuery());  // this is incorrect because it always return one
        if (IDValue <= 0)
        {
            return 0;
        }
        return IDValue; 
    }
    catch (Exception ex)
    {
        error.Text = "An Error Occur while update a case Bio_data!!" + ex.Message;
        error.ForeColor = Color.Red;
        return 0;
    }
    finally
    {
        con.Close();
    }

但我不知道如何在 C# 中獲取更新的 ID 值。

認為您真的在問如何使用OUTPUT子句檢索INSERTUPDATE返回的結果集。 您使用ExecuteReader而不是ExecuteNonQuery

這是一個簡化的例子:

創建測試表

SELECT * INTO Test FROM (VALUES (1, 'ABC'),(2,'DEF'),(3,'ABC')) A(Id, Val)

C# 代碼

更新Val'ABC'返回更新的行並打印它們(原諒可疑的錯誤處理等)

var conString = ...;
var query = "UPDATE TEST SET Val ='XYZ' OUTPUT INSERTED.* WHERE Val = @Val";

using (SqlConnection con = new SqlConnection(conString))
{

    con.Open();
    using (SqlCommand cmd = new SqlCommand(query, con))
    {
        cmd.Parameters.AddWithValue("@Val", "ABC");

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine(reader["id"] + " " + reader["Val"]);
            }
        }
    }

版畫

1 XYZ
3 XYZ

SELECT * FROM Test現在顯示

Id          Val
----------- ----
1           XYZ
2           DEF
3           XYZ

希望這會有所幫助。 您應該意識到這種方法可能會在觸發器和引發/處理 SQL 錯誤方面存在問題。

暫無
暫無

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

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