更新没有主键

时间:2016-09-27 13:51:02

标签: c# oracle odp.net

我想使用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)

1 个答案:

答案 0 :(得分:0)

我花了两天时间来找到解决方法。 幸运的是我能完成它。 这个想法是在DataTable中添加一个转储主键,这个新的转储列不会影响实际的数据库表。 这是我的代码示例

昏暗currentRow = m_DataTable.Rows(m_RowPosition) 将tmpRows()设为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是正在编辑的行。 请仔细考虑应用此技巧,因为它可能会更新表的所有数据。 适用于您的表只有一行(某种配置数据)的情况