C# 将id从第一个插入到两个表中

C# 将id从第一个插入到两个表中,c#,asp.net,sql-server,stored-procedures,insert,C#,Asp.net,Sql Server,Stored Procedures,Insert,我有两张桌子 待组织: 和tbl\u位置\u记录: 我正在使用存储过程将数据插入这些表中 插入组织 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[spInsOrg] (@orgName nvarchar(50), @orgCity nvarchar(50), @orgArea nvarchar(50), @orgTel nvarchar(50),

我有两张桌子

待组织

tbl\u位置\u记录

我正在使用存储过程将数据插入这些表中

插入组织

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spInsOrg]
    (@orgName nvarchar(50),
     @orgCity nvarchar(50),
     @orgArea nvarchar(50),
     @orgTel nvarchar(50),
     @orgEmail nvarchar(50),
     @orgType nvarchar(50),
     @orgStatus nvarchar(50),
     @strOwner nvarchar(50),
     @db_tstamp datetime2)
AS
    SET NOCOUNT OFF;

    INSERT INTO [tbl_orgs] ([orgName], [orgCity], [orgArea], [orgTel], [orgEmail], [orgType], [orgStatus], [strOwner], [db_tstamp]) 
    VALUES (@orgName, @orgCity, @orgArea, @orgTel, @orgEmail, @orgType, @orgStatus, @strOwner, @db_tstamp);

    SELECT 
        orgID, orgName, orgCity, orgArea, orgTel, orgEmail, orgType, 
        orgStatus, strOwner, db_tstamp 
    FROM 
        tbl_orgs 
    WHERE 
        (orgID = SCOPE_IDENTITY())
插入位置记录

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[spInsLoc]
    (@userID int,
     @orgID int,
     @jobID int,
     @strLat numeric(18, 0),
     @strLong numeric(18, 0),
     @strOwner varchar(50),
     @db_tstamp datetime2)
AS
    SET NOCOUNT OFF;

    INSERT INTO [tbl_location_records] ([userID], [orgID], [jobID], [strLat], [strLong], [strOwner], [db_tstamp]) 
    VALUES (@userID, @orgID, @jobID, @strLat, @strLong, @strOwner, @db_tstamp);

    SELECT 
        recordID, userID, orgID, jobID, strLat, strLong, strOwner, db_tstamp 
    FROM 
        tbl_location_records 
    WHERE 
        (recordID = SCOPE_IDENTITY())
我想在成功插入组织记录后使用单一表单添加插入组织的位置记录

protected void btnSubmit_Click(object sender, EventArgs e)
{
    string cs = ConfigurationManager.ConnectionStrings["IBS_3"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(cs))
    {
        SqlCommand cmd = new SqlCommand("spInsOrg", conn);
        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Parameters.Add("orgName", SqlDbType.NVarChar).Value = txtOrgName.Text;
        cmd.Parameters.Add("orgCity", SqlDbType.NVarChar).Value = txtCity.Text;
        cmd.Parameters.Add("orgArea", SqlDbType.NVarChar).Value = txtArea.Text;
        cmd.Parameters.Add("orgTel", SqlDbType.NVarChar).Value = txtTele.Text;
        cmd.Parameters.Add("orgEmail", SqlDbType.NVarChar).Value = txtEmail.Text;
        cmd.Parameters.Add("orgType", SqlDbType.NVarChar).Value = txtOrgType.Text;
        cmd.Parameters.Add("orgStatus", SqlDbType.NVarChar).Value = txtStatus.Text;
        cmd.Parameters.Add("@strOwner", SqlDbType.VarChar).Value = User.Identity.Name;
        cmd.Parameters.Add("@db_tstamp", SqlDbType.DateTime2).Value = DateTime.Now;

        conn.Open();
        cmd.ExecuteNonQuery();

        SqlCommand cmdloc = new SqlCommand("spInsLoc", conn);
        cmdloc.CommandType = CommandType.StoredProcedure;

        cmdloc.Parameters.Add("orgID", SqlDbType.Int).Value = 
    }
}
试图从这个链接中获得一些理解,但我对此一无所知

谢谢你的帮助


谢谢。

将输出参数添加到第一个存储过程:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spInsOrg]
(
  @orgID int output,
  @orgName nvarchar(50),
  @orgCity nvarchar(50),
  @orgArea nvarchar(50),
  @orgTel nvarchar(50),
  @orgEmail nvarchar(50),
  @orgType nvarchar(50),
  @orgStatus nvarchar(50),
  @strOwner nvarchar(50),
  @db_tstamp datetime2
  )
  AS
  SET NOCOUNT OFF;
  INSERT INTO [tbl_orgs] ([orgName], [orgCity], [orgArea], [orgTel], [orgEmail], [orgType], [orgStatus], [strOwner], [db_tstamp]) VALUES (@orgName, @orgCity, @orgArea, @orgTel, @orgEmail, @orgType, @orgStatus, @strOwner, @db_tstamp);
  SELECT @orgID =  SCOPE_IDENTITY()
将输出参数添加到命令

        using (SqlConnection conn = new SqlConnection(cs))
        {

            SqlCommand cmd = new SqlCommand("spInsOrg", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            var outParam = cmd.Parameters.Add("@orgID", SqlDbType.Int);
            outParam.Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@orgName", SqlDbType.NVarChar).Value = txtOrgName.Text;
            cmd.Parameters.Add("@orgCity", SqlDbType.NVarChar).Value = txtCity.Text;
            cmd.Parameters.Add("@orgArea", SqlDbType.NVarChar).Value = txtArea.Text;
            cmd.Parameters.Add("@orgTel", SqlDbType.NVarChar).Value = txtTele.Text;
            cmd.Parameters.Add("@orgEmail", SqlDbType.NVarChar).Value = txtEmail.Text;
            cmd.Parameters.Add("@orgType", SqlDbType.NVarChar).Value = txtOrgType.Text;
            cmd.Parameters.Add("@orgStatus", SqlDbType.NVarChar).Value = txtStatus.Text;
            cmd.Parameters.Add("@strOwner", SqlDbType.VarChar).Value = User.Identity.Name;
            cmd.Parameters.Add("@db_tstamp", SqlDbType.DateTime2).Value = DateTime.Now;
            conn.Open();
            cmd.ExecuteNonQuery();
            var orgId = (int)outParam.Value;
            SqlCommand cmdloc = new SqlCommand("spInsLoc", conn);
            cmdloc.CommandType = CommandType.StoredProcedure;

        }

那么如何在第二个存储过程中使用它。。。然后,我应该在我的asp.net代码中更改什么。?获取错误“当前上下文中不存在名称'outParam'。请检查此行。。var outParam=cmd.Parameters.Add(“orgID”,SqlDbType.Int);其他信息:过程或函数“spInsOrg”需要未提供的参数“@orgID”。按照建议添加了此参数。var outParam=cmd.Parameters.Add(“orgID”,SqlDbType.Int);var orgId=(int)outParam.Value;SqlCommand cmdloc=新的SqlCommand(“spInsLoc”,康涅狄格州);cmdloc.CommandType=CommandType.StoredProcess;cmdloc.Parameters.Add(“orgID”,SqlDbType.Int).Value=orgID;旁注:存储过程不应使用
sp
前缀。微软已经这样做了,而且你确实有可能在将来的某个时候发生名称冲突。最好只是简单地避免使用
sp.
并使用其他东西作为前缀,或者根本不使用前缀@马克:当然,谢谢。不过我只使用了“sp”。但我肯定会记住这一点。