Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Stored procedures 如何使用亚音速编写此代码?_Stored Procedures_Ado.net_Subsonic - Fatal编程技术网

Stored procedures 如何使用亚音速编写此代码?

Stored procedures 如何使用亚音速编写此代码?,stored-procedures,ado.net,subsonic,Stored Procedures,Ado.net,Subsonic,我有一些遗留代码,我正在使用亚音速重写,以帮助未来的维护人员。在大多数情况下,它是相对简单的,因为所有东西都进行存储过程调用。但是现在我在使用紧密耦合的ADO.NET代码时遇到了一些困难 代码取决于SqlDataAdapter来决定何时调用INSERT或UPDATE stored proc,我理解这一点。如何以亚音速方式重写此代码 public void SaveInvoice(InvoiceItems invoiceItems) { // extraneous code removed

我有一些遗留代码,我正在使用亚音速重写,以帮助未来的维护人员。在大多数情况下,它是相对简单的,因为所有东西都进行存储过程调用。但是现在我在使用紧密耦合的ADO.NET代码时遇到了一些困难

代码取决于SqlDataAdapter来决定何时调用INSERT或UPDATE stored proc,我理解这一点。如何以亚音速方式重写此代码

public void SaveInvoice(InvoiceItems invoiceItems)
{
    // extraneous code removed
    // invoiceItems is a dataset

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "InvoiceItem_INSERT";
    cmd.Connection = conn;

    updateCmd.CommandType = CommandType.StoredProcedure;
    updateCmd.CommandText = "InvoiceItem_UPDATE";
    updateCmd.Connection = conn;

    SqlCommandBuilder.DeriveParameters(cmd);
    SqlCommandBuilder.DeriveParameters(updateCmd);

    adapter.InsertCommand = cmd;
    adapter.UpdateCommand = updateCmd;

    adapter.Update(invoiceItems._InvoiceItemTable);
}

我是亚音速新手,非常感谢您的帮助。所有有帮助的答案都将被愉快地向上投票。

由于automagic插入/更新是通过
SqlDataAdapter.update()
方法专门完成的,因此不会使用亚音速精确表示此类代码。如果在亚音速名称空间的某个地方有,我也想知道如何使用它

如果您正在处理一个表(例如,
InvoiceItems
),您可以自己进行测试(这使用亚音速自动生成的活动记录实现):

希望这能让你开始


作为一个完全不相关的旁注,尝试跨多个表进行保存,因为它没有实现。我发现这很难…

你知道有没有办法从存储的进程中获取命令对象?亚音速doco非常缺乏:(我相信你能做的最好的事情就是得到亚音速版本的命令对象SPs.StoredProcName().Command-我不知道这是否有用。我一直在考虑这个问题,但每次我尝试使用它时,我都会遇到一个例外。我正在努力决定这是否值得争取,或者我是否应该保持这段代码的原样。:/Yeah,特别是因为它已经起作用了,而且似乎很简单,除非你你正在完全转向亚音速
int key = InvoiceItems.ID; // not sure what your primary key identifier is called
InvoiceItem item = new InvoiceItem(key);
if (item != null)
{
    SPs.InvoiceItem_UPDATE(param1, param2, etc).Execute();
}
else 
{
    SPs.InvoiceItem_INSERT(param1, param2, etc).Execute();
}