/// <summary> /// 更新或添加对象,若存在则更新,若不存在则添加 /// </summary> /// <param name="t">待更新或添加的对象</param> /// <returns>指示更新还是添加</returns> public UpdateOrInsertResult UpdateOrInsert(T t) { if (t == null) { throw new ArgumentNullException("t"); } foreach (IDataParameter param in UpdateOrInsertCommand.Parameters) { ColumnDefinition column = TableDefinition.GetColumn(ToNativeName(param.ParameterName)); param.Value = ConvertToDBValue(column.GetValue(t), column); } int ret = Convert.ToInt32(UpdateOrInsertCommand.ExecuteScalar()); if (ret >= 0) { if (IdentityColumn != null) { IdentityColumn.SetValue(t, ret); } return(UpdateOrInsertResult.Inserted); } else { return(UpdateOrInsertResult.Updated); } }
/// <summary> /// 将对象添加到数据库 /// </summary> /// <param name="t">待添加的对象</param> /// <returns>是否成功添加</returns> public virtual bool Insert(T t) { if (t == null) { throw new ArgumentNullException("t"); } foreach (IDataParameter param in InsertCommand.Parameters) { ColumnDefinition column = TableDefinition.GetColumn(ToNativeName(param.ParameterName)); param.Value = ConvertToDBValue(column.GetValue(t), column); } if (IdentityColumn == null) { InsertCommand.ExecuteNonQuery(); } else { IDataParameter param = InsertCommand.Parameters.Contains(ToParamName(IdentityColumn.PropertyName)) ? (IDataParameter)InsertCommand.Parameters[ToParamName(IdentityColumn.PropertyName)] : null; if (param != null && param.Direction == ParameterDirection.Output) { InsertCommand.ExecuteNonQuery(); IdentityColumn.SetValue(t, ConvertValue(param.Value, IdentityColumn.PropertyType)); } else { IdentityColumn.SetValue(t, ConvertValue(InsertCommand.ExecuteScalar(), IdentityColumn.PropertyType)); } } return(true); }
public void CreateIdentityColumn( Dictionary <string, UserTable> userTables, IDataRecord reader) { var schemaName = Convert.ToString(reader[SchemaNameOrdinal]); var tableName = Convert.ToString(reader[TableNameOrdinal]); var userTableNamespaceBuilder = new StringBuilder(schemaName.Length + tableName.Length + 1); userTableNamespaceBuilder.Append(schemaName). Append(Constants.Dot). Append(tableName); var userTableNamespace = userTableNamespaceBuilder.ToString(); if (!userTables.ContainsKey(userTableNamespace)) { return; } var userTable = userTables[userTableNamespace]; if (userTable == null) { return; } var identityColumn = new IdentityColumn { UserTable = userTable, ObjectName = Convert.ToString(reader[ObjectNameOrdinal]), SeedValue = Convert.ToInt32(reader[SeedValueOrdinal]), IncrementValue = Convert.ToInt32(reader[IncrementValueOrdinal]), IsNotForReplication = Convert.ToBoolean(reader[IsNotForReplicationOrdinal]) }; userTable.IdentityColumns.Add(identityColumn); }