错误1非静态字段,方法或属性需要对象引用

时间:2014-08-08 09:10:35

标签: c#

我正在创建一个从xml url / file获取数据的应用程序,然后将数据保存到数据库中。我的所有其他代码似乎都很好,但在我的插入中我一直收到错误。

这是错误

  

错误1非静态字段,方法或属性需要对象引用" DataSet1TableAdapters.vehiclesTableAdapter.InsertCars(字符串,字符串,字符串,字符串,字符串,十进制,十进制,字符串,字符串,字符串,字符串,字符串,字符串)'

我首先尝试转换为十进制,但是当我没有尝试时,我尝试了以下内容。

vehiclesTableAdapter.InsertCars(dr["REGNO"].ToString(), dr["STOCKNO"].ToString(), dr
["COLOUR"].ToString(), dr["NEWUSED"].ToString(), dr["MODELYEAR"].ToString(), Convert.ToDecimal
(Convert.ToInt16(dr["MILEAGE"].ToString())), Convert.ToDecimal(Convert.ToInt16(dr
["RETAILPRICE"].ToString())), dr["MMCODE"].ToString(), dr["IMAGE_URL1"].ToString(), dr
["IMAGE_URL2"].ToString(), dr["IMAGE_URL3"].ToString(), dr["IMAGE_URL4"].ToString(), dr
["DESCRIPTION"].ToString());

这是MILEAGE和RETAILPRICE

我仍然得到同样的错误。我可以在这方面给予一些帮助。

修改

按钮点击事件代码:

DataSet cars = new DataSet(); 
cars.ReadXml("example.com/example.xml");
progressBar1.Maximum = cars.Tables[2].Rows.Count; 

foreach (DataRow dr in cars.Tables[2].Rows) 
{ 
  vehiclesTableAdapter.InsertCars(SameAsAbove); 
  progressBar1.Value++; 
}

1 个答案:

答案 0 :(得分:0)

从错误消息中,我假设InsertCars方法不是静态的,并且您没有使用vehiclesTableAdapter的实例来访问它。

要么是这样,要么方法是静态的,但是你试图从中调用非静态方法,这在C#中是不允许的。

静态方法是那些不需要来自包含它们的实例的信息的方法,可以在不改变状态的情况下执行它们。

如果InsertCars不需要修改适配器,并且您不想拥有适配器实例,那么在此方法的声明中添加static,编译时错误应该dissapear。

默认情况下,在C#中,方法是实例方法,它们接收隐式的“self”参数。通过使它们成为静态,不需要(也不可用)这样的参数,然后该方法当然必须避免访问该类的任何实例(非静态)对象或方法。