private int GetUnusedID(string strFieldName, object oDeafult) { if (m_keyvalue == null) { return(-1); } DBCustomClass subdbclass = m_dbclass; //string sql = string.Format("SELECT * FROM {0}", subdbclass.MainTable); //DataTable tbl = Helper.GetDataTable(sql, MainForm.conn); DataTable tbl = Helper.GetDataTableProxy(subdbclass.MainTable, MainForm.conn); int nFieldIndex = -1; for (int i = 0; i < subdbclass.DBPrimaryKey.Length; i++) { m_findkeyvalues[i] = null;// GetNextID(subdbclass.DBPrimaryKey[i]); if (subdbclass.DBPrimaryKey[i].ToString().ToLower() == strFieldName.ToLower()) { nFieldIndex = i; } else if (m_keyvalue.Contains(subdbclass.DBPrimaryKey[i])) { m_findkeyvalues[i] = m_keyvalue[subdbclass.DBPrimaryKey[i]]; } } if (oDeafult != null && oDeafult != DBNull.Value) { m_findkeyvalues[nFieldIndex] = oDeafult; } else { m_findkeyvalues[nFieldIndex] = GetNextID(strFieldName); } if (Program.EnableRemoting && subdbclass.MainTable.Length > 7 && subdbclass.MainTable.Substring(0, 7) == "RTTEST_") { m_findkeyvalues[nFieldIndex] = Convert.ToInt32(m_findkeyvalues[nFieldIndex]); DataTableProxy proxy = DataTableServerProxy.GetDataTableProxy(); m_findkeyvalues = proxy.UTGetTableID(subdbclass.MainTable, m_findkeyvalues); } else { bool bFirstTry = true; while (tbl.Rows.Find(m_findkeyvalues) != null) { m_findkeyvalues[nFieldIndex] = Convert.ToInt32(m_findkeyvalues[nFieldIndex]) + (bFirstTry == true ? 1 : 1 /*1000*/); // 现在的id太大了 bFirstTry = false; } } m_keyvalue[strFieldName] = m_findkeyvalues[nFieldIndex]; if (oDeafult == DBNull.Value || Convert.ToInt32(m_findkeyvalues[nFieldIndex]) != Convert.ToInt32(oDeafult)) { SetLastID(strFieldName, Convert.ToInt32(m_findkeyvalues[nFieldIndex])); } return(Convert.ToInt32(m_findkeyvalues[nFieldIndex])); }