【发布时间】: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)
-
这是你的连接字符串。你的连接字符串是什么样的?
-
我检查了连接字符串,现在我得到了同样的错误(对象引用未设置为对象的实例)