使用 command.Parameters.AddWithValue() 时出现空引用异常
Null reference exception when using command.Parameters.AddWithValue()
我在主wpf中有这段代码window:
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 window代码:
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: Object reference not set to an instance
of an object.
at WpfApplication1.Windows.ChangePermissionsWindow.ComboBoxValuesToShow()
in c:\Users\Censored\Documents\Visual Studio
2013\Projects\WpfApplication1\WpfApplication1\Windows\WindowChangePermissions.xaml.cs:line 38}
System.Exception {System.NullReferenceException
非常感谢您的帮助!
非常high-level 使用对象初始化语法遵循这些步骤...
- 通过调用适当的构造函数
创建所需class的实例
- 调用所有列出的 属性 设置器
- Return新初始化的对象
ComboBoxValuesToShow 从构造函数调用,但基于列出的步骤 parent 属性 (在方法)直到构造函数 returns 之后才被设置,因为 属性 setter 直到实例创建之后才被调用。因此,在这种情况下,父级 属性 将始终为 null。
有几种方法可以解决这个问题...
- 如果您想在构造函数中使用 parent 属性 然后将值传递给构造函数并在内部初始化 属性。
或
- 使 ComboBoxValuesToShow 方法可从父级 window 访问,并将对 ComboBoxValuesToShow 的调用从构造函数移至父级 window 中的事件处理程序。
我在主wpf中有这段代码window:
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 window代码:
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: Object reference not set to an instance of an object.
at WpfApplication1.Windows.ChangePermissionsWindow.ComboBoxValuesToShow() in c:\Users\Censored\Documents\Visual Studio 2013\Projects\WpfApplication1\WpfApplication1\Windows\WindowChangePermissions.xaml.cs:line 38}
System.Exception {System.NullReferenceException
非常感谢您的帮助!
非常high-level 使用对象初始化语法遵循这些步骤...
- 通过调用适当的构造函数 创建所需class的实例
- 调用所有列出的 属性 设置器
- Return新初始化的对象
ComboBoxValuesToShow 从构造函数调用,但基于列出的步骤 parent 属性 (在方法)直到构造函数 returns 之后才被设置,因为 属性 setter 直到实例创建之后才被调用。因此,在这种情况下,父级 属性 将始终为 null。
有几种方法可以解决这个问题...
- 如果您想在构造函数中使用 parent 属性 然后将值传递给构造函数并在内部初始化 属性。
或
- 使 ComboBoxValuesToShow 方法可从父级 window 访问,并将对 ComboBoxValuesToShow 的调用从构造函数移至父级 window 中的事件处理程序。