无法理解为什么SqlConnection正在返回System.NullReferenceException

时间:2015-03-24 17:56:09

标签: c# sql-server-2008

令我感到困惑。我有这行代码导致问题

string prodID = DBTools.getProdID(args[0]).ExecuteScalar().ToString();

当我在我的程序中运行它时,我最终会收到错误。

public static SqlCommand getProdID(string server)
    {
        string sql = "SELECT Password FROM UTrainID";
        SqlCommand cmd = createCmd(server, "AACSMapping", sql);
        cmd.Connection.Open(); // this generates the System.NullReferenceException
        return cmd;
    }

让我感到困惑的是,我有一个可以测试它的UnitTest完美无缺。

 [TestMethod]
    public void getProdIDTest()
    {
        string ID = UTrain.DBTools.getProdID("PN1173312").ExecuteScalar().ToString();
        Assert.IsTrue(ID.Equals("XXXXXXXXX"));
    }

当我运行此控制台应用程序时,我检查了Args []值是否正确,即它与UnitTest中的值相同。其他令人讨厌的事情是,当我尝试通过单步调试它时它工作正常!这告诉我,这是某种类型的计时问题,但这超出了我的范围。以下是创建实际连接的代码。

public static SqlConnection createConnection(string server, string initcat)
    {
        try
        {
            SqlConnectionStringBuilder strBuild = new SqlConnectionStringBuilder();
            strBuild.IntegratedSecurity = true;
            strBuild.InitialCatalog = initcat;
            strBuild.DataSource = server;
            SqlConnection conn = new SqlConnection(strBuild.ConnectionString);
            return conn;
        } // end try
        catch (Exception e)
        {
            writeErrorMessage(e, "Could not create connection.");
            return null;
        }
    }

我不知道它有什么不同,但我打破代码的原因是我连接到许多不同的数据库,所以这样做更容易这样做我感觉

1 个答案:

答案 0 :(得分:0)

感谢您的评论。我终于找到了问题。它抛出了写入错误日志文件的错误。它是一个" SqlConnection的Type初始化器引发了一个异常"当我搜索该错误消息时,最关注的是app.config文件。我检查了它,并没有正确格式化。有额外的>。我可以看到为什么在运行单元测试时单元测试可能有效我猜他们不会加载app.config文件,但我仍然不明白为什么单步使用调试器会正常工作?