请教三层架构中数据访问层参数问题

ljsbwcwt 2010-06-12 02:24:26
// tbl_invoice ->发货单对象 TransferTerrice -> 转运平台对象
// bdNum -> 票号 transferTerrice -> 转运平台

public static void AddTbl_invoiceExcel(Tbl_invoice tbl_invoice)
{
string sql = "INSERT tbl_invoice (bdNum,transferTerrice) " +
"VALUES (@bdNum,@transferTerrice)";
try
{
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@bdNum",tbl_invoice.BdNum),
new SqlParameter("@transferTerrice",tbl_invoice.TransferTerrice.Code), // FK;
};

// 执行增加数据的操作
DBHelper.ExecuteCommand(sql, para);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}

想要请教的问题是:tbl_invoice带过来的转运平台对象有时为空时则报错"未将对象引用至对象的实例",在参数少的情况下我是这么解决的:

public static void AddTbl_invoiceExcel(Tbl_invoice tbl_invoice)
{
// 如果转运平台对象为空时则不插入转运平台的值
string sql;
if(tbl_invoice.TransferTerrice != null)
{
sql = "INSERT tbl_invoice (bdNum,transferTerrice) " +
"VALUES (@bdNum,@transferTerrice)";
}
else
{
sql = "INSERT tbl_invoice (bdNum) " +
"VALUES (@bdNum)";
}

try
{
// 如果转运平台对象为空时则不带转运平台参数
SqlParameter[] para;
if(tbl_invoice.TransferTerrice != null)
{
para = new SqlParameter[]
{
new SqlParameter("@bdNum",tbl_invoice.BdNum),
new SqlParameter("@transferTerrice",tbl_invoice.TransferTerrice.Code), // FK;
};
}
else
{
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@bdNum",tbl_invoice.BdNum),
};
}


DBHelper.ExecuteCommand(sql, para);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}



========== 这样在参数多的情况下,冗余代码会很多,想请教有没更好的办法控制?期待高手解答……
...全文
124 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hualoveqi 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cqq 的回复:]

可以在tbl_invoice里面
判断一下TransferTerrice是否为空,
如果为空的话,就new 一个“空”的TransferTerrice
TransferTerrice.code 定义为可空类型
[/Quote]
用过!
  • 打赏
  • 举报
回复
皇城龙三 2010-06-12
  • 打赏
  • 举报
回复
C# 委托系列之将方法作为方法的参数

http://hi.baidu.com/txh1204/blog/item/aef0d8824a6e7abc6c81190c.html

LINQ参数过多时的解决方案

http://www.cnblogs.com/nuaalfm/articles/1264796.html


参考一下吧
wuyq11 2010-06-12
  • 打赏
  • 举报
回复
invoice.TransferTerrice==?"":invoice.TransferTerrice.Code
也可使用可空类型NullAble
a21999 2010-06-12
  • 打赏
  • 举报
回复
重构,用面向对象的LINQ去设计,不会再有这些冗长的代码,也不会有拼接的SQL语句。
ljsbwcwt 2010-06-12
  • 打赏
  • 举报
回复
transferTerrice中的code为主键,可以为可空类型吗?
cqq 2010-06-12
  • 打赏
  • 举报
回复
可以在tbl_invoice里面
判断一下TransferTerrice是否为空,
如果为空的话,就new 一个“空”的TransferTerrice
TransferTerrice.code 定义为可空类型

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧