错误归纳:
1.问题描述:方法的调用:
举例:
new AddDAL().AddNameber(result);//AddNamber 方法名 result 参数
报错信息:
AddDAL为命名空间不为类型…
解决方案及原因:
DAL层的命名空间与class类名名称重合,更改DAL的class类名
2.问题描述:Guid ID插入重复字段:000000—0000—0000—…
举例:
Model层:
namespace testModel
{[FieldInfoAttribute(CanInsert = false,CanUpDate=false)]//新增时是否忽略,更新时是否忽略
public class couse
{
private Guid_id;
[TableInfoAttribute(Name = "course")]//约定数据库表名
}
}
解决方案及原因:
解决方案:
将【Fiel…】与【Table…】两个位置互换
原因:
两个限定约束条件的位置写反,将两个限定约束语句调换位置,约束主键条件写在主键下,约定总体数据库表名的代码写在命名空间下。
3.问题描述:无法将Guid隐式转化为textBox:
举例:
txt_Master_ID = new Guid(txt_Master_ID.Text);
解决方案及原因:
解决方案:
txt.masterID =Guid.Parse(txt_Master_ID.Text);
原因:
txt写错,应为实体类class中的txt.masterID,且Guid除了new Guid(string sql),有另一种转化方式为Guid.Parse();
4.问题及描述:数据库creationDate值1777-01-01-00-00-00溢出VS中txt.creationDate 0001-01-01-00-00-00
举例:创建时间:1999-03-08 00:00:00
解决方案及原因:
解决原因:
在修改按钮事件中
①数据库creationDate类型为date,应改为datetime
②List<Student.>list =new BLL().GetAllBLL();
直接遍历整张表,应根据主键值取出该行数据,改为GetByPK(txt.ID),在取出储存的数据库值creationDate
lab_Student_CreationDate.Text = Convert.ToString(new BLL().GetByPKBLL(txtStudentID.text).creationDate())
5.问题及描述:无法将正则表达式中间数据固定,可用来作为匹配的索引
举例:
原文件:
2020-09-28 08:36:22,339 [T:1] [ L:INFO]-更新成功,更新文件0.
正则表达式:
(?<Date>.*)\[[T:1][L:INFO-更新成功,更新文件].*(?<Number>\d)
结果:没有匹配
解决方案及原因:
解决:更新成功,更新文件.[T:1][L:INFO].-.且要注意空格字符,以\s代替
(?<Date>.*)\s\[T:1][L:INFO]\s-\s更新成功,更新文件.*(?<Number>\d)//括号和尖括号格式是用于后面调用引用的字段
原因:在写固定格式中,以【】为限制方法,是错误的,应直接写原字符串。
6.问题及描述:字段初始值设定项无法引用非静态字段、方法或属性…
举例:
namespace Util_syl
public class SqlHelp
{XmlHelp help = new XmlHelp()
string strNode ="filePath/SqlConnectionstring/sql";
string path = help.GetXmlnodeValue(strNode);
}
解决方案及原因:
原因:当实例化该类后,会先进行类里所有可直接运行的代码,例如:string str =1;等各种类似代码。该过程可称为字段初始值设定。次过程是无法直接引用非静态字段、方法或属性,否则报错。
解决:建立构造函数,在调用方法的代码外层再包一个方法
构造函数:
XML类:
namespace Util_syl
public class XmlHelp
{
XmlDocument xmlDoc = new XmlDocument();
string path;
public XmlHelp(string Path)
{
path = Path;
}
#region 读取指定节点的值---------------------
.......
#endregoin
}
Sql类
namespace File_Monitor
{
public class SqlHelp_Monitor
{
public DBHelper dbh;
public SqlHelp_Monitor()
{
XmlHelp xmlhelp = new XmlHelp(AppDomain.CurrentDomain.BaseDirectory + "监听.XML");
string strNode = "filePath/SqlConnectionstring/sql";
string path = xmlhelp.GetXmlNodeValue(strNode);
dbh = new DBHelper(path);
}
7.问题及描述:对象必须实现 IConvertible 错误提示及解决方案
如果出现以上错误。主要的原因有:
请检查数据类型转换过程有没有错误。就是说“=”两边的类型等。
还有就是存储过程中的参数,有可能你没给存储过程中的参数赋值等
对于实际遇到的问题:gridControl控件添加空白行后 不能保存到数据库。
分析认为第二种的可能性更大。
问题:
gridControl控件添加空白行后 不能保存到数据库。
通过属性设置添加空白行
添加的空白行 填值后,点新增或者保存到数据库,都会直接提示:对象必须实现 IConvertible 的错误提示
原因:
gridControl控件是通过绑定数据库为数据源的。绑定后,gridControl分配的内存空间是与数据库数据相同大小。当新增行且填值后,数据库的大小没有变,已经限定死。gridControl新增行属于超出了这个内存大小。所以报错。
解决方法:
通过给gridControl添加绑定一个过度用的数据源—>variableBindingSource
在这里插入图片描述
当gridControl控件新增行且填值后,variableBindingSource会同步扩大内存空间。再通过variableBindingSource与数据库作为绑定,将新增行添加到数据库。即可规避“对象必须实现 IConvertible ”的错误提示
8.问题及描述:var 不可使用的情景 导致“·”不出应该存在的方法
在写代码的过程中,遇到了一个很奇怪的现象,后经过大佬的分析讨论教学,解决了问题和找到原因。现在分享给跟我一样初学者的新手们一起看看。老鸟没见过的也欢迎一起学习进步。
建立一个DataTable()
dt = new DataTable();
dt.Columns.Add("订单日期", typeof(DateTime));
dt.Columns.Add("客户订单号");
dt.Columns.Add("订单号");
dt.Columns.Add("工单号");
dt.Columns.Add("品号");
dt.Columns.Add("品名");
dt.Columns.Add("工单数量", typeof(int));
dt.Rows.Add(Convert.ToDateTime("2020/9/19"), "4503285934", "2301-2009190003", "3501-2019250006", "204010003", "测试品号-AAA", 9999);//Add里面参数的数据顺序要和dt中的列的顺序对应
通过Tab使用foreach(模板为var)
foreach (var item in dt.Columns)
{
repositoryItemComboBox2.Items.Add(item);
}
item"."不出ColumnName:如图
当我需要取出列名添加到后续的DEV gridControl控件中时。发现怎么都无法直接“.”出别人都有的ColumnName.只能直接添加item(后续使用报错,通过可能的错误排除找到这里)
解决原因:
分析:var 是 VS 自带的用于自动解析值类型的一个通用变量,个人认为类比 object 。但是对于foreach循环中,条件是一个多类型数据的集合list,是分析不出来具体的类型,所以传入循环内 var 还是以 list 形式存在。导致 item 怎么都不会出现应该有的ColumnName,只会有基本的几个方法(ToString…)
解决:上代码
foreach (DataColumn item in dt.Columns)
{
repositoryItemComboBox2.Items.Add(item.ColumnName);
}