Lit_Mushroom 2020-04-26 01:32 采纳率: 0%
浏览 567

找了个C#带数据库的文件,运行登录之后报错System.NullReferenceException:“未将对象引用设置到对象的实例。”求大佬指点一下如何解决

图片说明

public bool UsersSelect(string pName, params SqlParameter[] ps)   //用户查询的方法
        {
            try
            {
                con = new SqlConnection(ConfigurationManager.AppSettings["strCon"]);
                if (con.State != ConnectionState.Open)//判断状态
                {
                    con.Open();//打开数据连接
                }
                cmd = new SqlCommand(pName, con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(ps);
                cmd.ExecuteNonQuery();
                return true;
            }
            catch (Exception)
            {

                return false;
            }
            finally
            {
                con.Close();
                con.Dispose();
                cmd.Dispose();
            }

        }

报错为 cmd.Dispose()的System.NullReferenceException:“未将对象引用设置到对象的实例。”
搜了一些System.NullReferenceException的解决方式 没有解决
求大神指点一下

还有就是想问一下用VS打开带数据库的C#文件应该怎么运行,小白有点怀疑是自己打开方式就不对= =
源码是VS2010 SQL server2008 我用sql server 2012和VS2017 运行代码前有把数据库文件附加到sql server里 不知道是哪里的问题 ball ball大佬指点一下

  • 写回答

3条回答 默认 最新

  • threenewbee 2020-04-26 10:42
    关注

    当执行到
    con = new SqlConnection(ConfigurationManager.AppSettings["strCon"]);
    的时候,如果连接打不开,或者没有找到配置strCon
    代码从try转到了catch
    然后转到了finally
    而下面的
    cmd = new SqlCommand(pName, con);
    这一行,没有被执行
    所以cmd是null
    此时你调用
    cmd.Dispose();
    显然就出错了。

    要避免这个错误,需要加上判断
    if (cmd != null)
    cmd.Dispose();

    但是要根本解决问题(不是说不报错,最终你希望数据库能访问,而不是出错),你得检查数据库和数据库连接字符串的配置。

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable