簡體   English   中英

更新沒有主鍵的表的一組行

[英]Update a set of rows of a table having no primary key

我想使用 ODP.net 更新行集。 我想根據 PRIORITY 的升序獲取員工列表,並用值 1 更新 PRIORITY 列並以 1 遞增。我嘗試了以下方法,但出現錯誤“動態 SQL 生成失敗。未找到關鍵信息”

StrQuery = "SELECT * FROM EMPLOYEE WHERE DEPT ='" + dept + "' ORDER BY PRIORITY";
DataTable dt = new DataTable();
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand(StrQuery, ora);
OracleCommandBuilder cb = new OracleCommandBuilder(da);
da.Fill(dt);
intNpriority = 1;
foreach (DataRow row in dt.Rows)
{
    row["PRIORITY"] = intNpriority;
    intNpriority = intNpriority + 1;
}
da.UpdateCommand = cb.GetUpdateCommand();
da.Update(dt);

該表沒有主鍵,我現在無法添加。 我可以添加自定義更新查詢嗎?如何添加? 有沒有其他方法可以實現相同的目標?

表結構:

column name   |  (data type)
Employee_name |  (varchar2)
dept          |  (varchar2)
PRIORITY      | (NUMBER)

我花了兩天時間尋找解決方法。 幸運的是我能完成它。 思路是在DataTable中增加一個dump主鍵,這個新的dump列不影響真實的數據庫表。 這是我的代碼示例

Dim currentRow = m_DataTable.Rows(m_RowPosition) Dim tmpRows() As DataRow = {currentRow}

        Dim cmdBuilder As OracleCommandBuilder = New OracleCommandBuilder(m_Adapter)
        
        **If m_DataTable.PrimaryKey.Count = 0 Then
            m_DataTable.Columns.Add(New DataColumn("_ID_", System.Type.GetType("System.String")))
            m_DataTable.Columns("_ID_").Unique = True
        End If**

        m_Adapter.Update(tmpRows)

注意:currentRow 是正在編輯的行。 請慎重考慮應用此提示,因為它可能會更新表的所有數據。 它適用於您的表只有一行(某種配置數據)的情況

暫無
暫無

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

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