Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空引用异常_C#_.net_Nullreferenceexception_Oledbparameter - Fatal编程技术网

C# 空引用异常

C# 空引用异常,c#,.net,nullreferenceexception,oledbparameter,C#,.net,Nullreferenceexception,Oledbparameter,此代码生成空引用异常。初始化参数数组的行出现异常。有什么问题吗?我不知道如何跟踪堆栈跟踪并在其上运行任何逻辑。 提前谢谢 DAL dal = new DAL(); string SQL = @"INSERT INTO Assets ([AssetName],[AssetType],[Model],[Description], [PurchaseValue],[Salvag

此代码生成空引用异常。初始化参数数组的行出现异常。有什么问题吗?我不知道如何跟踪堆栈跟踪并在其上运行任何逻辑。 提前谢谢

DAL dal = new DAL();

    string SQL = @"INSERT INTO Assets ([AssetName],[AssetType],[Model],[Description],
                                                          [PurchaseValue],[SalvageValue],[Currency],[DateAcquired,[DateRetire],[ImagePath],
                                                          [InUse])
                                                          VALUES (?,?,?,?,?,?,?,?,?,?,?)";

    OleDbParameter[] par = new OleDbParameter[]{ 
    new OleDbParameter("@assetname",name.Text),
    new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
    new OleDbParameter("@model",model.Text),
    new OleDbParameter("@description",description.Text),
    new OleDbParameter("@purchasevalue",purchaseval.Value),
    new OleDbParameter("@salvagevalue",salvageval.Value),
    new OleDbParameter("@currency",currencies.SelectedIndex),
    new OleDbParameter("@dateacquired",purchasedate.Value),
    new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
    new OleDbParameter("@imagepath","N/A"),
    new OleDbParameter("@addedby",MDIParent1.User.ID)
    };

您可能有一个或多个可空类型(可能是您的日期?)没有值,但也可能没有SelectedValue。在调试器中的语句之前,检查所有参数是否为非null。

您正在查询的某个对象很可能为null


我建议将它们打印成标准输出。

其中一行包含空引用:

new OleDbParameter("@assetname",name.Text),
new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
new OleDbParameter("@model",model.Text),
new OleDbParameter("@description",description.Text),
new OleDbParameter("@purchasevalue",purchaseval.Value),
new OleDbParameter("@salvagevalue",salvageval.Value),
new OleDbParameter("@currency",currencies.SelectedIndex),
new OleDbParameter("@dateacquired",purchasedate.Value),
new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
new OleDbParameter("@imagepath","N/A"),
new OleDbParameter("@addedby",MDIParent1.User.ID)

看看调试器中的属性值,我们真的无法处理您提供的代码。

看起来您直接从用户处获取输入,而没有先验证或删除它。我的建议是,在将每个用户输入的值发送到数据库之前,验证每个用户输入的值,这可能会解决您的NRE问题。这将允许您在使用错误查询清理数据库之前捕获输入中的任何错误

请不要将变量命名为与对象相同的名称。我是说

DAL dal = new DAL(); 
至少在本地变量下划线或使用其他名称

DAL _dal = new DAL();
DAL dataAccessLayer = new DAL();

好电话。在我的回答中进行合并:如果您将它们中的每一个放在一行(而不是{})中,您将得到一个更有用的堆栈跟踪。或者调试器方法也可以很好地工作。我认为参数值来自控件,最可能的罪魁祸首是assettypes上的SelectedValue。