一個Dotnet數據框架的bug

很久沒寫C#代碼了,今天在維護公司老項目時,偶然發現一個BUG。記錄一下,後面的同窗就不要踩坑啦。

-------------------------------------------------------------------sql

該項目採用了一個國產的數據訪問框架 PDF.NET ,可是我有一個表的主鍵是bigint,數據編號已經大於Int32.MaxValue,此時就不能再插入數據了。緣由以下(紅色部分轉換報錯):緩存

 

internal static int InsertInner(EntityBase entity, List<string> objFields, CommonDB DB)
        {
            if (objFields == null || objFields.Count == 0) return 0; IDataParameter[] paras = new IDataParameter[objFields.Count]; string tableName = entity.TableName; string identityName = entity.IdentityName; string sql = "INSERT INTO " + entity.GetSchemeTableName(); string fields = ""; string values = ""; int index = 0; //獲取實體屬性信息緩存 var entityFieldsCache = EntityFieldsCache.Item(entity.GetType()); foreach (string field in objFields) { if (identityName != field) { fields += ",[" + field + "]"; string paraName = DB.GetParameterChar + "P" + index.ToString(); values += "," + paraName; paras[index] = DB.GetParameter(paraName, entity.PropertyList(field)); //從緩存中獲取當前field所對應的類型 Type fieldType = entityFieldsCache.GetPropertyType(field); if (fieldType == typeof(string) && paras[index].Value != null) //爲字符串類型的參數指定長度 edit at 2012.4.23 //((IDbDataParameter)paras[index]).Size = entity.GetStringFieldSize(field); SetParameterSize(ref paras[index], entity, field,DB); else if (fieldType == typeof(byte[])) //爲字節類型指定轉換類型,防止空值時被看成字符串類型 paras[index].DbType = DbType.Binary; index++; } } sql = sql + "(" + fields.TrimStart(',') + ") VALUES (" + values.TrimStart(',') + ")"; int count = 0; if (identityName != "") { //有自增字段 object id = entity.PropertyList(identityName); EntityCommand ec = new EntityCommand(entity, DB); string insertKey = ec.GetInsertKey(); count = DB.ExecuteInsertQuery(sql, CommandType.Text, paras, ref id,insertKey); entity.setProperty(identityName, Convert.ToInt32(id)); } else { count = DB.ExecuteNonQuery(sql, CommandType.Text, paras); } if (count > 0) entity.ResetChanges(); return count; }

 

該bug已經給做者說了,期待他們的及時修復。框架

相關文章
相關標籤/搜索