C# 将id从第一个插入到两个表中
我有两张桌子 待组织: 和tbl\u位置\u记录: 我正在使用存储过程将数据插入这些表中 插入组织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),
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”。但我肯定会记住这一点。