C# 在插入时返回@标识以用作变量

C# 在插入时返回@标识以用作变量,c#,sql,sql-server,scope-identity,C#,Sql,Sql Server,Scope Identity,我有一个功能,我想执行插入或更新,这取决于导入的.csv文件中找到的档案id是设置为当前id还是新id(如果是新的,则在文件的档案id列中将其标记为“新建”、“新建1”、“新建2”等). 不幸的是,在保存过程中,调用的一些函数需要使用ProfileID。但是,如果正在执行插入,则调用这些函数时,ProfileID是未知的 我已经设置了INSERT查询,以便在使用SCOPE\u IDENTITY()插入新行后返回ProfileID,但我不确定如何获取此结果并将其放入变量中。有办法做到这一点吗 这

我有一个功能,我想执行
插入
更新
,这取决于导入的
.csv
文件中找到的
档案id是设置为当前id还是新id(如果是新的,则在文件的
档案id
列中将其标记为“新建”、“新建1”、“新建2”等).

不幸的是,在保存过程中,调用的一些函数需要使用
ProfileID
。但是,如果正在执行
插入
,则调用这些函数时,
ProfileID
是未知的

我已经设置了
INSERT
查询,以便在使用
SCOPE\u IDENTITY()
插入新行后返回
ProfileID
,但我不确定如何获取此结果并将其放入变量中。有办法做到这一点吗

这是完整的保存功能代码:

private void SaveProfile(string[] curProfile)
{  
    string profId = GetValue(curProfile, (int)ProfileColumns.ProfileId).ToLower();

    string query ="";

    using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["AbleCommerce"].ToString()))
    {
        try
        {
            if (profId.Contains("new")) 
            {
                string insertQuery = "INSERT INTO ProductProfile (Name, Description, SpeciesLink, LineDraw, LineDrawThumbnail, ProfileThumbnail, ComponentThickness, ComponentWidth, FinishedThickness, FinishedWidth, ClassificationID, StockOrCust, ComponentFactor, Visibility, Notes, OrderBy) VALUES (@Name, @Description, @SpeciesLink, @LineDraw, @LineDrawThumbnail, @ProfileThumbnail, @ComponentThickness, @ComponentWidth, @FinishedThickness, @FinishedWidth, @ClassificationID, @StockOrCust, @ComponentFactor, @Visibility, @Notes, @OrderBy) SELECT SCOPE_IDENTITY()";
                Response.Write("PERFORM INSERT<br />");
                query = insertQuery;
            }

            {
                string updateQuery = "UPDATE ProductProfile SET Name = @Name, Description = @Description, SpeciesLink = @SpeciesLink, LineDraw = @LineDraw, LineDrawThumbnail = @LineDrawThumbnail, ProfileThumbnail = @ProfileThumbnail, ComponentThickness = @ComponentThickness, ComponentWidth = @ComponentWidth, FinishedThickness = @FinishedThickness, FinishedWidth = @FinishedWidth, ClassificationID = @ClassificationID, StockOrCust = @StockOrCust, ComponentFactor = @ComponentFactor, Visibility = @Visibility, Notes = @Notes, OrderBy = @OrderBy WHERE ProfileID = @profid";
                Response.Write("PERFORM UPDATE<br />");
                query = updateQuery;
            }

            SqlCommand cmd = new SqlCommand(query, cn);
            cmd.CommandType = CommandType.Text;

            cn.Open();

            cmd.Parameters.AddWithValue("@profid", GetValue(curProfile, (int)ProfileColumns.ProfileId).Trim());
            cmd.Parameters.AddWithValue("@Name", GetValue(curProfile, (int)ProfileColumns.Name).Trim());
            cmd.Parameters.AddWithValue("@Description", GetValue(curProfile, (int)ProfileColumns.Description).Trim());
            cmd.Parameters.AddWithValue("@SpeciesLink", GetValue(curProfile, (int)ProfileColumns.SpeciesLink).Trim());
            cmd.Parameters.AddWithValue("@Linedraw", GetValue(curProfile, (int)ProfileColumns.LineDraw).Trim());
            cmd.Parameters.AddWithValue("@LineDrawThumbnail", GetValue(curProfile, (int)ProfileColumns.LineDrawThumbnail).Trim());
            cmd.Parameters.AddWithValue("@ProfileThumbnail", GetValue(curProfile, (int)ProfileColumns.ProfileThumbnail).Trim());
            cmd.Parameters.AddWithValue("@ComponentThickness", GetValue(curProfile, (int)ProfileColumns.ComponentThickness).Trim());
            cmd.Parameters.AddWithValue("@ComponentWidth", GetValue(curProfile, (int)ProfileColumns.ComponentWidth).Trim());
            cmd.Parameters.AddWithValue("@FinishedThickness", GetValue(curProfile, (int)ProfileColumns.FinishedThickness).Trim());
            cmd.Parameters.AddWithValue("@FinishedWidth", GetValue(curProfile, (int)ProfileColumns.FinishedWidth).Trim());
            cmd.Parameters.AddWithValue("@ClassificationID", GetValue(curProfile, (int)ProfileColumns.ClassificationID).Trim());

            string stockCust = GetValue(curProfile, (int)ProfileColumns.StockOrCust).ToLower();

            switch (stockCust)
            {
                case "stock":
                    stockCust = "0";
                    break;
                case "custom":
                    stockCust = "1";
                    break;
                case "discontinued":
                    stockCust = "2";
                    break;
            }

            cmd.Parameters.AddWithValue("@StockOrCust", Convert.ToInt32(stockCust));
            cmd.Parameters.AddWithValue("@ComponentFactor", GetValue(curProfile, (int)ProfileColumns.ComponentFactor).Trim());

            string Visibility = GetValue(curProfile, (int)ProfileColumns.Visibility).ToLower();

            switch (Visibility)
            {
                case "public":
                    Visibility = "0";
                    break;
                case "private":
                    Visibility = "1";
                    break;
            }

            cmd.Parameters.AddWithValue("@Visibility", Convert.ToInt32(Visibility));
            cmd.Parameters.AddWithValue("@Notes", GetValue(curProfile, (int)ProfileColumns.Notes).Trim());
            cmd.Parameters.AddWithValue("@OrderBy", GetValue(curProfile, (int)ProfileColumns.OrderBy).Trim());

            cmd.ExecuteNonQuery();

            cn.Close();

            // this is the portion of the function that makes the call to other functions to complete the save process
            int profileID = Convert.ToInt32(GetValue(curProfile, (int)ProfileColumns.ProfileId));
            SaveArtchStyle(profileID, curProfile);
            SaveAssignedItems(profileID, curProfile);
            //update dimensions
            //UpdateProductDimensions(profileID, GetValue(curProfile, (int)ProfileColumns.FinishedThickness).Trim(), GetValue(curProfile, (int)ProfileColumns.FinishedWidth).Trim());
        }
        catch (Exception ex)
        {
            ErrorLabel.Text = "There was an error with the file." + ex.ToString();
        }
    }
}
private void SaveProfile(字符串[]curProfile)
{  
字符串profId=GetValue(curProfile,(int)ProfileColumns.ProfileId.ToLower();
字符串查询=”;
使用(SqlConnection cn=new SqlConnection(ConfigurationManager.ConnectionString[“AbleCommerce”].ToString())
{
尝试
{
如果(利润包含(“新”))
{
string insertQuery=“插入到ProductProfile(名称、说明、规格链接、LineDraw、LineDrawThumbnail、ProfileThumbnail、组件厚度、组件宽度、成品厚度、成品宽度、分类ID、库存或库存、组件因子、可见性、注释、订单依据)值中(@Name、@Description、@SpeciesLink、@LineDraw、@LineDraw缩略图、@profile缩略图、@ComponentThickness、@ComponentWidth、@FinishedThickness、@FinishedWidth、@ClassificationID、@StockOrCust、@ComponentFactor、@Visibility、@Notes、@OrderBy)选择SCOPE_IDENTITY();
响应。写入(“执行插入
”); query=insertQuery; } { 字符串更新项="更新产品配置文件集名称=@Name,Description=@Description,SpeciesLink=@SpeciesLink,LineDraw=@LineDraw,LineDrawThumbnail=@LineDrawThumbnail,ProfileThumbnail=@ProfileThumbnail,ComponentThickness=@ComponentWidth,FinishedThickness=@FinishedThickness,FinishedWidth=@FinishedWidth,ClassificationID=@ClassificationID,StockorCast=@StockorCast,ComponentFactor=@ComponentFactor,Visibility=@Visibility,Notes=@Notes,OrderBy=@OrderBy,其中ProfileID=@profid”; 响应。写入(“执行更新
”; query=updateQuery; } SqlCommand cmd=新的SqlCommand(查询,cn); cmd.CommandType=CommandType.Text; cn.Open(); cmd.Parameters.AddWithValue(“@profid”,GetValue(curProfile,(int)ProfileColumns.ProfileId.Trim()); cmd.Parameters.AddWithValue(“@Name”,GetValue(curProfile,(int)ProfileColumns.Name.Trim()); cmd.Parameters.AddWithValue(“@Description”,GetValue(curProfile,(int)ProfileColumns.Description.Trim()); cmd.Parameters.AddWithValue(“@SpeciesLink”,GetValue(curProfile,(int)ProfileColumns.SpeciesLink.Trim()); cmd.Parameters.AddWithValue(“@Linedraw”,GetValue(curProfile,(int)ProfileColumns.Linedraw.Trim()); cmd.Parameters.AddWithValue(“@LineDrawThumbnail”,GetValue(curProfile,(int)ProfileColumns.LineDrawThumbnail.Trim()); cmd.Parameters.AddWithValue(“@ProfileThumbnail”,GetValue(curProfile,(int)ProfileColumns.ProfileThumbnail.Trim()); cmd.Parameters.AddWithValue(“@ComponentThickness”,GetValue(curProfile,(int)ProfileColumns.ComponentThickness.Trim()); cmd.Parameters.AddWithValue(“@ComponentWidth”,GetValue(curProfile,(int)ProfileColumns.ComponentWidth.Trim()); cmd.Parameters.AddWithValue(“@FinishedThickness”,GetValue(curProfile,(int)ProfileColumns.FinishedThickness.Trim()); cmd.Parameters.AddWithValue(“@FinishedWidth”,GetValue(curProfile,(int)ProfileColumns.FinishedWidth.Trim()); cmd.Parameters.AddWithValue(“@ClassificationID”,GetValue(curProfile,(int)ProfileColumns.ClassificationID.Trim()); 字符串stockCust=GetValue(curProfile,(int)ProfileColumns.StockOrCust.ToLower(); 交换机(stockCust) { 案例“股票”: stockCust=“0”; 打破 案例“海关”: stockCust=“1”; 打破 “中止”案: stockCust=“2”; 打破 } cmd.Parameters.AddWithValue(“@StockOrCust”,Convert.ToInt32(stockCust)); cmd.Parameters.AddWithValue(“@ComponentFactor”,GetValue(curProfile,(int)ProfileColumns.ComponentFactor.Trim()); string Visibility=GetValue(curProfile,(int)ProfileColumns.Visibility.ToLower(); 开关(可见性) { “公众”案: 可见性=“0”; 打破 “私人”案件: 可见性=“1”; 打破 } cmd.Parameters.AddWithValue(“@Visibility”,Convert.ToInt32(Visibility)); cmd.Parameters.AddWithValue(“@Notes”,GetValue(curProfile,(int)ProfileColumns.Notes.Trim()); cmd.Parameters.AddWithValue(“@OrderBy”,GetValue(curProfile,(int)ProfileColumns.OrderBy.Trim()); cmd.ExecuteNonQuery(); cn.Close(); //这是函数中调用其他函数以完成保存过程的部分 int profileID=Convert.ToInt32(GetValue(curProfile,(int)ProfileColumns.profileID)); SaveArtchStyle(profileID,curProfile); SaveAssignedItems(profileID,curProfile); //更新
cmd.Parameters.Add("@ID", SqlDbType.Int, 4).Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
//Now just read the value of: cmd.Parameters["@ID"].value
var insertValue = cmd.Parameters["@ID"].value
 SET @ID = SCOPE_IDENTITY();
 Int32 newProdID = 0;
 string sql =
    "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
    + "SELECT CAST(scope_identity() AS int)";
using (SqlConnection conn = new SqlConnection(connString))
{
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.Add("@Name", SqlDbType.VarChar);
    cmd.Parameters["@name"].Value = newName;
    try
    {
        conn.Open();
        newProdID = (Int32)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}