使用命令时出现空引用异常。Parameters.AddWithValue() [重复]

Null reference exception when using command.Parameters.AddWithValue() [duplicate]

提问人:WeinForce 提问时间:1/17/2017 最后编辑:marc_sWeinForce 更新时间:1/17/2017 访问量:222

问:

我在wpf主窗口中有以下代码:

private void ButtonChangePermissions_Click(object sender, RoutedEventArgs e)
{
    if (ComboBoxSelectedProfile.SelectedIndex != -1)
    {
        ChangePermissionsWindow cpWindow = new ChangePermissionsWindow { parent = this };
        cpWindow.Show();
    }
    else
    {
        MessageBox.Show("Please choose a profile first.");
    }
}

这是子 wpf 窗口代码:

public partial class ChangePermissionsWindow : Window
{
        private readonly string dbConnectionString = Properties.Settings.Default.dbConnectionString;
        public postLoginWindow parent { get; set; }

        public ChangePermissionsWindow()
        {
            InitializeComponent();
            ComboBoxValuesToShow();
        }

        private void ComboBoxValuesToShow()
        {
            using (SqlConnection connection = new SqlConnection(dbConnectionString))
            {
                try
                {
                    connection.Open();

                    if (TableFunctions.doesTableExist("ProfilePermissions", dbConnectionString))
                    {
                        string selectQuery = "SELECT Permissions from ProfilePermissions where ProfileName = @ProfileName";

                        using (SqlCommand command = new SqlCommand(selectQuery, connection))
                        {
                            command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text);//This line produces the Null reference error
                            ...Does not matter from here
                        }

出于某种原因,该行:

command.Parameters.AddWithValue("@ProfileName", parent.ComboBoxSelectedProfile.Text)

导致 .NullReferenceException

这是异常文档:

System.NullReferenceException:对象引用未设置为实例 对象。
在 WpfApplication1.Windows.ChangePermissionsWindow.ComboBoxValuesToShow() 在 c:\Users\Censored\Documents\Visual Studio 中 2013\Projects\WpfApplication1\WpfApplication1\Windows\WindowChangePermissions.xaml.cs:第 38 行}
System.Exception {System.NullReferenceException

我将非常感谢您的帮助!

sql-server wpf nullreferenceexception

评论


答:

1赞 Patrick B. 1/17/2017 #1

在非常高的级别上,使用 Object 初始化语法遵循以下步骤...

  1. 通过调用相应的构造函数创建所需类的实例
  2. 调用所有列出的属性设置者
  3. 返回新初始化的对象

ComboBoxValuesToShow 是从构造函数调用的,但根据列出的步骤,属性(在方法中使用)直到构造函数返回后才会设置,因为直到创建实例后才会调用属性 setter。因此,在这种情况下,父属性将始终为 null。

有几种方法可以解决这个问题......

  • 如果要在构造函数中使用属性,则将值传递到构造函数中,并在内部初始化该属性。

  • 使 ComboBoxValuesToShow 方法可从父窗口访问,并将对 ComboBoxValuesToShow 的调用从构造函数移动到父窗口中的事件处理程序。

评论

0赞 WeinForce 1/18/2017
你的解释是金子,我很惊讶你为我做的有多清楚。有什么方法可以订阅你吗?