Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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_Counter - Fatal编程技术网

C# 执行插入时,使用计数器向值中添加数字

C# 执行插入时,使用计数器向值中添加数字,c#,sql,counter,C#,Sql,Counter,现在,我有一个函数,在调用时将一个新的篮子项目插入数据库。我想更改的是[Sku]参数的设置方式。我想尝试使用与字符串值(在本例中,字符串值为“SetupFee”)配合使用的计数器变量,以便插入的每个项目的Sku参数都不同 例如,如果有5个项目,我希望计数器变量将1、2、3、4等添加到Sku参数中,以便每个产品具有不同的Sku。这有点奇怪,但根据事情的安排,这是最好的选择。我以前从未尝试过在查询中使用计数器。对我如何处理这个问题有什么建议吗 这是我的功能: protected void

现在,我有一个函数,在调用时将一个新的篮子项目插入数据库。我想更改的是[Sku]参数的设置方式。我想尝试使用与字符串值(在本例中,字符串值为“SetupFee”)配合使用的计数器变量,以便插入的每个项目的Sku参数都不同

例如,如果有5个项目,我希望计数器变量将1、2、3、4等添加到Sku参数中,以便每个产品具有不同的Sku。这有点奇怪,但根据事情的安排,这是最好的选择。我以前从未尝试过在查询中使用计数器。对我如何处理这个问题有什么建议吗

这是我的功能:

     protected void UpdateBasketItems(int BasketID, string BasketItemName, decimal FeeAmount, int ProductId)
    {
        try 
        { 
            int count = 0;
            Basket basket = AbleContext.Current.User.Basket;

            IList<BasketItem> items = GetBasketItems();

            string query = "INSERT INTO ac_BasketItems ([ParentItemId], [BasketId], [BasketShipmentId], [ProductId], [TaxCodeId], [Name], [Sku], [Price], [Weight], [Quantity], [OrderItemTypeId], [OrderBy], [ShippableId], [LastModifiedDate], [TaxAmount], [TaxRate], [CreatedDate] )VALUES (0, @BasketID, (SELECT MAX(BasketShipmentId) FROM [ac_BasketItems] WHERE [BasketID] = @BasketID), 19524, 1,'" + BasketItemName + "','SetupFee'," + FeeAmount + ", 0, 1, 0, 999, 0, Current_TimeStamp, 0, 0, Current_TimeStamp)";

            using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
            {
                cn.Open();                
                SqlCommand cmd = new SqlCommand(query, cn);
                cmd.Parameters.Add(new SqlParameter("@BasketID", BasketID));

                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
                cn.Close();

            }

        }
        catch (Exception x)
        {
            Response.Write("ERROR with UpdateBasketItems(): " + x.Message.ToString() + "<br />");
        }
    }
protectedvoid UpdateBasketItems(int-BasketID、string-BasketItemName、decimal-feeAumount、int-ProductId)
{
尝试
{ 
整数计数=0;
Basket Basket=AbleContext.Current.User.Basket;
IList items=GetBasketItems();
string query=“插入ac_BasketItems([ParentItemId]、[BasketId]、[BasketShipmentId]、[ProductId]、[TaxCodeId]、[Name]、[Sku]、[Price]、[Weight]、[Quantity]、[OrderItemTypeId]、[OrderBy]、[ShippableId]、[LastModifiedDate]、[TaxAmount]、[TaxRaxRate]、[CreatedDate])值(0、@BasketId),[ac_BasketItems]中选择MAX(BasketShippingId)],其中[BasketID]=@BasketID),19524,1,“+BasketItemName+”,“SetupFee”,“+FeeAmunit+”,0,1,0,999,0,当前时间戳,0,0,当前时间戳)”;
使用(SqlConnection cn=new SqlConnection(ConfigurationManager.ConnectionString[“AbleCommerce”].ToString())
{
cn.Open();
SqlCommand cmd=新的SqlCommand(查询,cn);
cmd.Parameters.Add(新的SqlParameter(“@BasketID”,BasketID));
cmd.CommandType=CommandType.Text;
cmd.ExecuteNonQuery();
cn.Close();
}
}
捕获(异常x)
{
Response.Write(“UpdateBasketEMS()错误:”+x.Message.ToString()+“
”); } }
用于MS SQL Server的简单(内置功能):

最简单的方法是在要插入的表中创建一个
identity
列。插入后,可以使用
SCOPE\u identity()
函数获取该值


但是,如果您的表已经有一个现有的标识列(不能使用)您可以创建一个只有一行的序列表。该行将包含下一个_seq值,插入后您将获得该值并更新+1

此计数器是否在请求后重置?是否需要在应用程序重新启动后保存prev值?是的,它会重置,并且必须在应用程序重新启动后保存prev值您是否使用SQL服务器?试试你的Insert语句中的字符串格式,然后根据参数+计数器[位置]递增和/或设置Sku怎么样还要确保您的Sku是VarChar,而不是在数据库中键入Int,最好创建一个存储过程,每次调用后,让存储过程根据新插入的记录,根据返回的ID进行快速更新,该ID将是
@@SCOPE\u IDENTITY
,或者他可以在返回时更新存储过程中的字段@@SCOPE#u IDENTITy并在退出存储过程之前更新当前记录,其中新插入字段的返回ID被分配给@@Scope#u IDENTITy。如果该表定义了一个IDENTITy列,则该值将已被分配,只有在需要在其c#代码中对该编号进行处理时,他才需要获取该编号。他不知道w最后更新/插入的行,除非他正在分配@@Scope\标识,我目前正在做同样的事情,不管他说他想根据插入来分配它。因此,如果插入的行是自动递增字段,他仍然需要使用UPDate语句。我认为在storedProcI agr中执行所有工作更容易ee with you sproc是一个不错的选择。我并不反对你只是添加更多的信息,这可能会使看似艰难的过度思考过程变得更容易。。