/// <summary> /// 更新一个对象 /// </summary> /// <param name="TDataBase"></param> public void UpdateOnlyObject(IDataBase TDataBase) { DataObjectAttribute TDataObject = TDataBase.GetType().GetCustomAttributes(typeof(DataObjectAttribute), false)[0] as DataObjectAttribute; string[] KeyS = TDataObject.KeyS.Split(new char[] { ',' }); Array TArray = Array.CreateInstance(typeof(string), KeyS.Length); KeyS.CopyTo(TArray, 0); string TableName = TDataObject.Table; System.Reflection.FieldInfo[] mFieldInfo = TDataBase.GetType().GetFields(); System.Data.SqlClient.SqlParameter[] TSqlParameter = new SqlParameter[mFieldInfo.Length]; string SelSql = "Update " + TableName + " Set "; string FieldValueName = string.Empty; string WhereName = string.Empty; for (byte index = 0; index < mFieldInfo.Length; index++) { if (mFieldInfo[index].GetCustomAttributes(typeof(FieldObjectAttribute), false).Length != 0) { FieldObjectAttribute TFieldObject = mFieldInfo[index].GetCustomAttributes(typeof(FieldObjectAttribute), false)[0] as FieldObjectAttribute; //if (TFieldObject.Type == 1) //{ TSqlParameter[index] = new SqlParameter("@" + mFieldInfo[index].Name, TDataBase.GetType().GetField(mFieldInfo[index].Name).GetValue(TDataBase)); //} } else { if (Array.IndexOf(TArray, mFieldInfo[index].Name) == -1) { FieldValueName += FieldValueName.Length > 0 ? ", " + mFieldInfo[index].Name + "=@" + mFieldInfo[index].Name : mFieldInfo[index].Name + "=@" + mFieldInfo[index].Name; } TSqlParameter[index] = new SqlParameter("@" + mFieldInfo[index].Name, TDataBase.GetType().GetField(mFieldInfo[index].Name).GetValue(TDataBase)); } } for (byte index = 0; index < KeyS.Length; index++) { WhereName += WhereName.Length > 0 ? " and " + KeyS[index] + " = @" + KeyS[index] : " Where " + KeyS[index] + " = @" + KeyS[index]; } SelSql += FieldValueName + WhereName; ExeSQL(SelSql, TSqlParameter); }
/// <summary> /// 添加一个对象 /// </summary> /// <param name="TDataBase"></param> public void AddOnlyObject(IDataBase TDataBase) { DataObjectAttribute TDataObject = TDataBase.GetType().GetCustomAttributes(typeof(DataObjectAttribute), false)[0] as DataObjectAttribute; string[] KeyS = TDataObject.KeyS.Split(new char[] { ',' }); string TableName = TDataObject.Table; System.Reflection.FieldInfo[] mFieldInfo = TDataBase.GetType().GetFields(); System.Data.SqlClient.SqlParameter[] TSqlParameter = new SqlParameter[mFieldInfo.Length]; string SelSql = "insert into " + TableName + " "; string FieldName = string.Empty; string ValueName = string.Empty; for (byte index = 0; index < mFieldInfo.Length; index++) { if (mFieldInfo[index].GetCustomAttributes(typeof(FieldObjectAttribute), false).Length != 0) { FieldObjectAttribute TFieldObject = mFieldInfo[index].GetCustomAttributes(typeof(FieldObjectAttribute), false)[0] as FieldObjectAttribute; if (TFieldObject.Type == 0) { FieldName += FieldName.Length > 0 ? "," + mFieldInfo[index].Name : mFieldInfo[index].Name; ValueName += ValueName.Length > 0 ? "," + "@" + mFieldInfo[index].Name : "@" + mFieldInfo[index].Name; TSqlParameter[index] = new SqlParameter("@" + mFieldInfo[index].Name, System.Guid.NewGuid().ToString()); } else if (TFieldObject.Type == 1) { // 此字段为自增列放弃 } } else { FieldName += FieldName.Length > 0 ? "," + mFieldInfo[index].Name : mFieldInfo[index].Name; ValueName += ValueName.Length > 0 ? "," + "@" + mFieldInfo[index].Name : "@" + mFieldInfo[index].Name; TSqlParameter[index] = new SqlParameter("@" + mFieldInfo[index].Name, TDataBase.GetType().GetField(mFieldInfo[index].Name).GetValue(TDataBase)); } } SelSql += " (" + FieldName + ") VALUES (" + ValueName + ")"; ExeSQL(SelSql, TSqlParameter); }
/// <summary> /// 获得一个对象 /// </summary> /// <param name="TDataBase"></param> public IDataBase GetOnlyObject(IDataBase TDataBase) { // 生成条件 DataObjectAttribute TDataObject = TDataBase.GetType().GetCustomAttributes(typeof(DataObjectAttribute), false)[0] as DataObjectAttribute; string[] KeyS = TDataObject.KeyS.Split(new char[] { ',' }); string TableName = TDataObject.Table; System.Data.SqlClient.SqlParameter[] TSqlParameter = new SqlParameter[KeyS.Length]; System.Reflection.FieldInfo[] mFieldInfo = TDataBase.GetType().GetFields(); string SelSql = "Select * From " + TableName + " "; for (byte index = 0; index < KeyS.Length; index++) { if (index == 0) { SelSql += " Where " + KeyS[index] + " = @" + KeyS[index] + " "; } else { SelSql += " and " + KeyS[index] + " = @" + KeyS[index] + " "; } TSqlParameter[index] = new SqlParameter("@" + KeyS[index], TDataBase.GetType().GetField(KeyS[index]).GetValue(TDataBase)); } // 得到记录 System.Data.DataSet TDataSet = new DataSet(); TDataSet = GetSelectRow(SelSql, TSqlParameter); if (TDataSet.Tables[0].Rows.Count == 0) { return(null); } // 把数据分配到字段 foreach (System.Reflection.FieldInfo TFieldInfo in mFieldInfo) { TDataBase.GetType().GetField(TFieldInfo.Name).SetValue(TDataBase, TDataSet.Tables[0].Rows[0][TFieldInfo.Name] == System.DBNull.Value ? GetTypeValue(TFieldInfo.FieldType) : TDataSet.Tables[0].Rows[0][TFieldInfo.Name]); } return(TDataBase); }
/// <summary> /// 删除一个对象 /// </summary> /// <param name="TDataBase"></param> public void DelOnlyObject(IDataBase TDataBase) { DataObjectAttribute TDataObject = TDataBase.GetType().GetCustomAttributes(typeof(DataObjectAttribute), false)[0] as DataObjectAttribute; string[] KeyS = TDataObject.KeyS.Split(new char[] { ',' }); string TableName = TDataObject.Table; System.Reflection.FieldInfo[] mFieldInfo = TDataBase.GetType().GetFields(); System.Data.SqlClient.SqlParameter[] TSqlParameter = new SqlParameter[KeyS.Length]; string SelSql = "delete " + TableName; string FieldValueName = string.Empty; for (byte index = 0; index < KeyS.Length; index++) { FieldValueName += FieldValueName.Length > 0 ? " and " + KeyS[index] + " = @" + KeyS[index] : " Where " + KeyS[index] + " = @" + KeyS[index]; TSqlParameter[index] = new SqlParameter("@" + KeyS[index], TDataBase.GetType().GetField(KeyS[index]).GetValue(TDataBase)); } SelSql += FieldValueName; ExeSQL(SelSql, TSqlParameter); }