Object reference not set to an instance of an object.一般是什么原因造成?

解决方案 »

  1.   

    译:未将对象引用到对象的实例.
    声明了变量,但是没有赋值,仍然为null.用的时候就会报错.
      

  2.   

    比如:string GetText()
    {
    return null;
    }void ParseText()
    {
    string[] values = GetText().Split(',');
    }
      

  3.   

    这是用C#写COM给asp调。我在工程里用vbs来测。 public void InsertData(object a,object orderform)
    {
    string sql = string.Format("SELECT * FROM {0} WHERE {1} = @{1} ", tableNamne, primaryKey); //这个我试过输出了正确
    #if DEBUG
    Console.Write("marshalColumn=" + marshalColumn + "!");         //marshalColumn是private property,这里输出 marshalColumn=! 
    #endif
    if(marshalColumn != "")
    {
    fac = new OrderFormFac(connectionString, sql,marshalColumn,"^_.*");
    OrderForm objOrderF = orderform as OrderForm; 
    fac.Save(objOrderF); 
    }
    else
    {
    #if DEBUG
    Console.Write("marshalColumn=" + marshalColumn + "!");         //这里没有输出
    #endif fac = new OrderFormFac(connectionString,sql);
    Dictionary objShopper = orderform as Dictionary; 
    #if DEBUG
    Console.Write("orderform.shopper_id=" + objShopper["shopper_id"]);
    #endif
    fac.SaveAs(objShopper); 
    }

    }然后错误信息Object reference not set to an instance of an object这么怎么回事?
      

  4.   

    可疑代码:
    OrderForm objOrderF = orderform as OrderForm; Dictionary objShopper = orderform as Dictionary; fac.Save(objOrderF|objShopper); 时可能objShopper = null。
    if(obj... != null)fac.Save(obj...)
      

  5.   

    else
    {
    #if DEBUG
    Console.Write("marshalColumn=" + marshalColumn + "!");         //这里没有输出
    #endif这里就没有输出了,到不了下面的代码
      

  6.   

    贴出你的 marshalColumn 属性看一下。
      

  7.   

    private string marshalColumn;public void InitStorage(string sConnectionString,string sTable,string sKey,string sProgID,string sMarshalColumn,string sDateChanged)
    {
    connectionString = sConnectionString;
    tableNamne = sTable;
    primaryKey = sKey;
    if(!Convert.IsDBNull(sProgID))
    progID = sProgID;
    else
    progID = string.Empty; if(!Convert.IsDBNull(sMarshalColumn)) 
    marshalColumn = sMarshalColumn;
    else
    marshalColumn = "";
    if(!Convert.IsDBNull(sDateChanged)) 
    dateChanged = sDateChanged;
    else
    dateChanged = string.Empty;
    }
    这个在InsertData之前调用了
      

  8.   

    if(!Convert.IsDBNull(sMarshalColumn)) 
    marshalColumn = sMarshalColumn;
    else
    marshalColumn = "";直接改为:marshalColumn = sMarshalColumn;
      

  9.   

    ok,搞定了,谢谢3tzjq(永不言弃)。为什么会这样?
      

  10.   

    string 类型应该用 if (marshalColumn != string.Empty) 判断。而marshalColumn = "" 和 marshalColumn = string.Empty 结果是一样的!所以不用判断。
      

  11.   

    private   string   marshalColumn; public   void   InitStorage(string   sConnectionString,string   sTable,string   sKey,string   sProgID,string   sMarshalColumn,string   sDateChanged) 

    connectionString   =   sConnectionString; 
    tableNamne   =   sTable; 
    primaryKey   =   sKey; 
    if(!Convert.IsDBNull(sProgID)) 
    progID   =   sProgID; 
    else 
    progID   =   string.Empty; if(!Convert.IsDBNull(sMarshalColumn))   
    marshalColumn   =   sMarshalColumn; 
    else 
    marshalColumn   =   " "; 
    if(!Convert.IsDBNull(sDateChanged))   
    dateChanged   =   sDateChanged; 
    else 
    dateChanged   =   string.Empty; 

    这个在InsertData之前调用了