提问人:WeinForce 提问时间:1/17/2017 最后编辑:marc_sWeinForce 更新时间:1/17/2017 访问量:222
使用命令时出现空引用异常。Parameters.AddWithValue() [重复]
Null reference exception when using command.Parameters.AddWithValue() [duplicate]
问:
我在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赞
Patrick B.
1/17/2017
#1
在非常高的级别上,使用 Object 初始化语法遵循以下步骤...
- 通过调用相应的构造函数创建所需类的实例
- 调用所有列出的属性设置者
- 返回新初始化的对象
ComboBoxValuesToShow 是从构造函数调用的,但根据列出的步骤,父属性(在方法中使用)直到构造函数返回后才会设置,因为直到创建实例后才会调用属性 setter。因此,在这种情况下,父属性将始终为 null。
有几种方法可以解决这个问题......
- 如果要在构造函数中使用父属性,则将值传递到构造函数中,并在内部初始化该属性。
或
- 使 ComboBoxValuesToShow 方法可从父窗口访问,并将对 ComboBoxValuesToShow 的调用从构造函数移动到父窗口中的事件处理程序。
评论
0赞
WeinForce
1/18/2017
你的解释是金子,我很惊讶你为我做的有多清楚。有什么方法可以订阅你吗?
评论