【问题标题】:Object reference not set to an instance of an object C# class [closed]对象引用未设置为对象 C# 类的实例 [关闭]
【发布时间】:2013-07-23 15:41:05
【问题描述】:

尝试在我的 C# Windows 窗体应用程序中调用 DataAccess 层时,我不断收到此错误。

在我的设计中,我使用了一个接口和一个类。

名为iDataAccess的接口,里面的代码如下:

IDataAccess.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
public interface IDataAccess
{

    object GetScalar(string sql);
    DataTable GetDataTable(string sql);
    int InsOrUpdOrDel(string sql);
}

名为 DataAccess 的类及其内部的代码如下所示: 数据访问.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

public class DataAccess : IDataAccess  
{
    public static string CONNSTR = ConfigurationManager.ConnectionStrings["SqlDbConnect"].ConnectionString;

    public DataAccess()

    {

    }

  public System.Data.DataTable GetDataTable(string sql)
    {
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection(CONNSTR);
        try
        {
            conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(dt);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
        return dt;
    }
}

现在,我想在 form.cs 代码中创建上述类的对象。出于这个原因,我尝试了两种不同的方法,但它们都不适合我,如下所示:

IDataAccess _idataAccess = new DataAccess(); // 我得到实例失败错误

IDataAccess _idataAccess = null; // 错误:对象引用未设置为对象的实例

谁能给我一个关于这个问题的想法,好吗?

【问题讨论】:

  • “//我收到实例失败错误”是什么意思?创建新的 DataAccess 实例时会出现什么错误?
  • 调试器在哪里停止,如果你要求它在抛出异常时停止? 可能是因为 ConfigurationManager.ConnectionStrings["SqlDbConnect"] 正在返回 null,这隐含地是该类型的静态构造函数的一部分。
  • 这是实例错误:System.InvalidOperationException:实例失败。在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean IntegratedSecurity, Boolean withFailover)
  • 这是你的连接字符串。你的连接字符串是什么样的?
  • 我检查了连接字符串,现在我得到了同样的错误(对象引用未设置为对象的实例)

标签: c# class interface


【解决方案1】:

你没有 SqlDbConnect

 ConfigurationManager.ConnectionStrings["SqlDbConnect"].ConnectionString;

在您的配置中。

确保此行返回您期望的内容。

除非您在数据访问类中实现这些方法,否则您的代码无法编译

public object GetScalar(string sql)
    {
        throw new NotImplementedException();
    }

    public int InsOrUpdOrDel(string sql)
    {
        throw new NotImplementedException();
    }

【讨论】:

  • 我确实有它,但你认为它无法读取它是我得到第一个错误的原因吗? “即时连接错误”。
  • 谢谢。是的,这导致了那个错误
【解决方案2】:
IDataAccess _idataAccess = new DataAccess();

可行,但您需要实施

object GetScalar(string sql);

int InsOrUpdOrDel(string sql);

DataAccess

如下

public class DataAccess : IDataAccess  
{
    public static string CONNSTR = ConfigurationManager.ConnectionStrings["SqlDbConnect"].ConnectionString;

    public DataAccess()

    {

    }

  object GetScalar(string sql)
  {
      return new object();
  }

  int InsOrUpdOrDel(string sql)
  {
      return 1;
  }

  public System.Data.DataTable GetDataTable(string sql)
    {
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection(CONNSTR);
        try
        {
            conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(dt);
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            conn.Close();
        }
        return dt;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多