【问题标题】:C#/SQL Error "Object not set to an instance of an object"C#/SQL 错误“对象未设置为对象的实例”
【发布时间】:2015-10-20 16:12:11
【问题描述】:

这实际上可能不是代码问题,但这里... 我的 C# 程序读取一个 CSV 文件并构建一个 SQL Insert 语句将文件的所有行插入到一个表中,因此 Insert 语句变为:

Insert GHP_For_CMS (GroupId, EmployeeID, etc...) values (rec1_field1, rec1_field2, etc...), (rec2_field1, rec2_field2, etc...)

SQL 针对来自开发服务器的沙盒/开发数据库完美运行。 SQL 崩溃并出现 NullReference 异常(“对象未设置为对象的实例”)针对来自生产服务器的相同沙盒/开发数据库。开发服务器的框架版本为 4.0.30319.18052,生产服务器的框架版本为 4.0.30319.18063。

我知道我在这里没有提供很多信息,但是有人有什么想法吗?或者至少有一些要检查的想法?我已经用头撞这个 3-4 天了,但没有任何东西能抬起它丑陋的头。

TIA!

错误发生在下面的“ExecuteNonQuery”上...

string dbConnString = ConfigurationManager.ConnectionStrings[targetDatabase].ToString();
if (null != dbConnString)
{
    using (SqlConnection dbConn = new SqlConnection(dbConnString))
    {
        if (dbConn != null)
        {
            SqlCommand cmd = new SqlCommand(m_sqlInserts.ToString(), dbConn);
            dbConn.Open();
            int rowsAdded = cmd.ExecuteNonQuery();

...

【问题讨论】:

  • 所以NullReferenceException。您需要在代码中显示异常发生的位置。
  • 能否附加调试生产环境中运行的进程?那么请向我们展示C#调用中出现错误的C#代码行以及执行SQL命令的C#调用中为null的参数或对象。
  • 我知道这可能看起来很明显,但是表格列是否在您的开发和生产之间排列?例如,您的开发表是否有一个新列正在用于尚未投入生产的新功能?
  • @GreatNate:我正在运行相同的 pgm 并从两个不同的服务器查询相同的数据库和表——也就是说,我编译了相同的程序并将其从同一文件复制到两个服务器我的盒子。
  • m_sqlInserts 的值是多少?

标签: c# sql insert executenonquery


【解决方案1】:

所以问题的答案(因为我无法发布更多详细信息,我真的很想知道要尝试的事情):这是一个简单的权限问题,运行进程的帐户无法插入记录到表中。帮助我得出这个结论的评论来自@cdonner(再次感谢您!)希望查看堆栈跟踪。我意识到我可以在控制台日志中返回 StackTrace 而不仅仅是 InnerException 消息,并且它(SQL 错误)终于被揭示了。

【讨论】:

  • 很高兴您发现了这一点,很抱歉 Stackoverflow 警方否决了您的问题。
  • 不担心。更关心的是弄清楚真正的问题是什么。
猜你喜欢
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 2012-08-31
  • 2011-11-21
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多