Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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#_Sql_Identity_Point Of Sale - Fatal编程技术网

C# 销售点的逻辑?

C# 销售点的逻辑?,c#,sql,identity,point-of-sale,C#,Sql,Identity,Point Of Sale,我的桌子 create table sale ( idsale int primary key identity, idclient int, user1 varchar(50), fecha datetime ) create table listofsale ( idsale int, idproduct int, amount int, priceunit float, subtotal ) 当销售结束时,我将插入所有 我想我将插入以下信息: table sale 销售清单 然后我进

我的桌子

create table sale
(
idsale int primary key identity,
idclient int,
user1 varchar(50),
fecha datetime
)

create table listofsale
(
idsale int,
idproduct int,
amount int,
priceunit float,
subtotal
)
当销售结束时,我将插入所有 我想我将插入以下信息:

table sale
销售清单 然后我进行插入,但是如何为列表获取相同的idsale? 我的另一个想法是我的idsale是varchar 10 我用c随机抽取字母和数字,我会得到它 在一个文本框中,这样我可以同时保存它

或者,我可以用什么其他形式来做? 做这件事最好的方法是什么

-增加 { 我一直有一个按钮可以插入销售并获取id, 完成后,您可以添加列表。。 但我知道这不是正确的形式。。 有时,如果您没有添加任何产品,那么您的销售没有列表,请关闭应用程序并再次打开它 }

当您插入销售时。。。。 SQL@@IDENTITY变量将包含上次生成的idsale值。 可以使用此值将所需的idsale插入到listofsale表中

如果您需要更多信息,请在此处找到。

当您插入销售时。。。。 SQL@@IDENTITY变量将包含上次生成的idsale值。 可以使用此值将所需的idsale插入到listofsale表中


如果您需要更多信息,可以在此处找到

您有几个选项。更多信息请点击此处:

使用SCOPE_IDENTITY,它返回在当前会话中创建的最后一个标识值,并且也限于当前作用域。这解决了@@IDENTITY的问题

让INSERT语句通过OUTPUT子句为您提供插入的ID

使用uniqueidentifier GUID,而不是使用Int作为键。优点:您可以在客户端创建id并将其提交到服务器。缺点:这会给你的索引带来麻烦


如果由我决定,我想100%确定我要返回的ID值,那么我会使用上面的选项2。

您有几个选项。更多信息请点击此处:

使用SCOPE_IDENTITY,它返回在当前会话中创建的最后一个标识值,并且也限于当前作用域。这解决了@@IDENTITY的问题

让INSERT语句通过OUTPUT子句为您提供插入的ID

使用uniqueidentifier GUID,而不是使用Int作为键。优点:您可以在客户端创建id并将其提交到服务器。缺点:这会给你的索引带来麻烦


如果由我决定,我想100%确定我要返回的ID值,那么我会使用上面的选项2。

我很难理解问题是什么。通读一遍,在我看来,生成销售ID并不一定有问题,而是在跨会话/计算机/实例/等为客户维护一个销售列表时有问题

假设: 1特定客户一次只能有一份销售清单,以及 2您的idclient列是销售列表所属客户的ID

解决方案: 不要寻找销售,而是在表sale中寻找相关客户的idclient。如果没有任何结果,则为该客户创建一个新的销售,如果它确实有结果,则使用该saleid。只要你需要saleid,就这样做

更好的解决方案: 上述解决方案只允许您对每个客户进行一次销售,从而列出销售清单。如果您想要任何数量的过去已完成销售,但只有一个当前销售,请打开一个,执行以下操作:

将isSaleCompleted布尔列添加到sale表中。仅当销售完成并完成时,才将其设置为true。 然后,在与上面相同的客户销售搜索中,也检查isSaleCompleted是否为false

因此,客户端销售搜索存储过程如下所示:

CREATE Procedure ClientSaleSearch
(
    @clientid int
)
SELECT saleid
From Sale
WHERE id=@userid AND isSaleCompleted = '0'

我有点难以理解问题是什么。通读一遍,在我看来,生成销售ID并不一定有问题,而是在跨会话/计算机/实例/等为客户维护一个销售列表时有问题

假设: 1特定客户一次只能有一份销售清单,以及 2您的idclient列是销售列表所属客户的ID

解决方案: 不要寻找销售,而是在表sale中寻找相关客户的idclient。如果没有任何结果,则为该客户创建一个新的销售,如果它确实有结果,则使用该saleid。只要你需要saleid,就这样做

更好的解决方案: 上述解决方案只允许您对每个客户进行一次销售,从而列出销售清单。如果您想要任何数量的过去已完成销售,但只有一个当前销售,请打开一个,执行以下操作:

将isSaleCompleted布尔列添加到sale表中。仅当销售完成并完成时,才将其设置为true。 然后,在与上面相同的客户销售搜索中,也检查isSaleCompleted是否为false

因此,客户端销售搜索存储过程如下所示:

CREATE Procedure ClientSaleSearch
(
    @clientid int
)
SELECT saleid
From Sale
WHERE id=@userid AND isSaleCompleted = '0'

我认为您不应该将idsale这样的主键作为varchar,因为它是slo ws-down搜索和检索数据。尝试将idsale设置为自动编号,在sale表中插入数据后,获取上次插入的标识值的id,并将其用于在listofsale中插入

在处理我的销售点时,我设计了如下表格:

SaleItems
{
    transaction_id int,
    product_id int,
    quantity float,
    unit_price float,
    discount float
}
注:小计不是必需的,因为您可以根据金额和价格单位计算小计

Subtotal = priceunit x amount

我认为不应该将idsale这样的主键设为varchar,因为它会减慢搜索和检索数据的速度。尝试将idsale设置为自动编号,在sale表中插入数据后,获取上次插入的标识值的id,并将其用于在listofsale中插入

在处理我的销售点时,我设计了如下表格:

SaleItems
{
    transaction_id int,
    product_id int,
    quantity float,
    unit_price float,
    discount float
}
注:小计不是必需的,因为您可以根据金额和价格单位计算小计

Subtotal = priceunit x amount

我知道!但是如果你在两台计算机上同时做,会发生什么呢?我不想有这个问题@sashai如果在两个不同的客户端上插入@@IDENTITY,则每个客户端的值都不同,因为每个客户端都有1个插入@@标识具有SQL会话作用域。表示它不是在SQL会话之间共享的。好的,您有两个不同的值,但是如果我从sale中选择maxidsale并将其添加到我的表listofsale中,那么它将获得最后一个!,在计算机1和计算机2中,将使用idsale和lastnumber添加到销售列表中,这将是一个问题@萨沙:不一定。如果涉及到触发器,@identity可以引用与OP后面的内容无关的其他标识值。@angel:您不能信任select maxidsale。。。如果有多个插入几乎同时发生,那么它就不起作用。我知道!但是如果你在两台计算机上同时做,会发生什么呢?我不想有这个问题@sashai如果在两个不同的客户端上插入@@IDENTITY,则每个客户端的值都不同,因为每个客户端都有1个插入@@标识具有SQL会话作用域。表示它不是在SQL会话之间共享的。好的,您有两个不同的值,但是如果我从sale中选择maxidsale并将其添加到我的表listofsale中,那么它将获得最后一个!,在计算机1和计算机2中,将使用idsale和lastnumber添加到销售列表中,这将是一个问题@萨沙:不一定。如果涉及到触发器,@identity可以引用与OP后面的内容无关的其他标识值。@angel:您不能信任select maxidsale。。。如果有多个插入几乎同时发生,则它不起作用。