使用command.Parameters.AddWithValue()

时间:2017-01-17 02:37:35

标签: sql-server wpf nullreferenceexception

我在主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

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

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

  1. 通过调用相应的构造函数
  2. 创建所需类的实例
  3. 致电所有列出的物业设定者
  4. 返回新初始化的对象
  5. 从构造函数中调用

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

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

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

    或者

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