gpt4 book ai didi

c# - 将 SqlParameter 添加到 SqlParameterCollection 时出现 NullReferenceException

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:35 27 4
gpt4 key购买 nike

为了解决这个问题,我绞尽脑汁好几个小时了,希望有人能帮我解决这个问题。

我在 C# 应用程序中插入数据库。作为一名优秀的编码员,我正在参数化我的查询。

相关代码为:

int contactId = -1;

oString = "INSERT into {0}.Creditors (AccountID, DissectionId, Reference, FileAs, ABN, Created, Modified, GUID)"
+ " output INSERTED.ID"
+ " values (1, @dissectionId, ";
if(disbursement.trade_supplier.trust_id.Length > 0)
{
oString += "@reference, ";
}
else
{
oString += "null, ";
}
if(disbursement.trade_supplier.trading_name.Length > 0)
{
oString += "@name, ";
}
else
{
oString += "null, ";
}
if(disbursement.trade_supplier.business_number.Length > 0)
{
oString += "@abn, ";
}
else
{
oString += "null, ";
}
oString += " CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, @guid)";
oString = string.Format(oString, "[" + textBox1.Text + "].[dbo]");
using (SqlCommand insertCreditor = new SqlCommand(oString))
{
insertCreditor.Connection = myConnection;
insertCreditor.Parameters.Add("@dissectionId", SqlDbType.Int).Value = Convert.ToInt32(defaultDissectionID);
if (disbursement.trade_supplier.trust_id.Length > 0)
{
insertCreditor.Parameters.Add("@reference", SqlDbType.NVarChar, 8).Value = disbursement.trade_supplier.trust_id;
}
if (disbursement.trade_supplier.trading_name.Length > 0)
{
insertCreditor.Parameters.Add("@name", SqlDbType.NVarChar, 200).Value = disbursement.trade_supplier.trading_name;
}
if (disbursement.trade_supplier.business_number.Length > 0)
{
SqlParameter abn = new SqlParameter("@abn", SqlDbType.NVarChar, 14);
abn.Value = disbursement.trade_supplier.business_number;
MessageBox.Show(abn.GetType().ToString());
MessageBox.Show(abn.Value.ToString());
if (insertCreditor == null)
{
MessageBox.Show("InsertCreditor is null");
}
if (insertCreditor.Parameters == null)
{
MessageBox.Show("Parameters is null");
}
if(abn == null)
{
MessageBox.Show("null object sql parameter");
}
else
{
MessageBox.Show("sql parameter is not null");
if (insertCreditor.Parameters == null)
{
MessageBox.Show("Parameters collection is null?");
}
else
{
MessageBox.Show("Parameters collection is not null");
insertCreditor.Parameters.Add(abn);
}
}
}
if (disbursement.trade_supplier.guid.Length > 0)
{
insertCreditor.Parameters.Add("@guid", SqlDbType.UniqueIdentifier).Value = disbursement.trade_supplier.guid;
}
else
{
insertCreditor.Parameters.Add("@guid", SqlDbType.UniqueIdentifier).Value = new Guid();
}
}

违规行是 insertCreditor.Parameters.Add(abn);

这会导致 NullReferenceExecption:未将对象引用设置为对象的实例。

但是,我的 MessageBox 调用显示 abninsertCreditor.Parameters 都不为空。

如果我删除此部分并在那里只使用 null,它会通过它,但随后会在下一个插入中以不同的值再次发生。

当我在违规行断点时显示的变量:

abn {@abn}  System.Data.SqlClient.SqlParameter
abn.Value "1223334555" object {string}
disbursement.trade_supplier {PSConsoleExtractor.TradeSupplier} PSConsoleExtractor.TradeSupplier
disbursement.trade_supplier.business_number "1223334555" string
insertCreditor.Parameters {System.Data.SqlClient.SqlParameterCollection} System.Data.SqlClient.SqlParameterCollection
this {PSConsoleExtractor.Form1, Text: PropertySafe Console Exporter (v 2.0.2.0)} PSConsoleExtractor.Form1

有什么想法吗?

最佳答案

我最终通过添加一些额外的 null 检查来解决这个问题,这样它就不会到达它为 null 时出错的地步。这对我来说仍然没有意义,因为我一路检查了变量的每一部分,没有一个是空的,但它以某种方式起作用了。

关于c# - 将 SqlParameter 添加到 SqlParameterCollection 时出现 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com