所以我有两张桌子,房东和财产。 我正在尝试将数据插入到我的属性表中,但是我必须输入当时登录的任何人的房东ID,以便它能够正常工作。我想知道有没有办法使用插入语句的内连接。
我之前使用像这样的select语句完成了这个操作,它向我显示了与登录的房东相关的所有属性:
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["rent-
dbConnectionString1"].ToString();
con.Open();
SqlCommand comm = new SqlCommand();
comm.CommandText = "select p.Property_Id, p.Property_Address,
p.Property_Num_Of_Tenants, p.Property_Vacant from Properties p inner join
Landlords l On p.Landlord_Id = l.Landlord_Id where l.Landlord_Id =
p.Landlord_Id and l.Landlord_Email = '" + checkEmail + "'";
comm.Connection = con;
SqlDataReader rd = comm.ExecuteReader();
但是,我不确定如何将它用于insert语句,因为它与select不同。这是我目前的插入代码:
string cs =
System.Configuration.ConfigurationManager.ConnectionStrings["rent-
dbConnectionString1"].ConnectionString;
SqlConnection con = new SqlConnection(cs);
SqlCommand cmd = new SqlCommand("INSERT INTO Properties(Landlord_Id,
Property_Address, Property_Num_Of_Tenants, Property_Vacant) values('" +
this.txtLandlordId.Text + "','" + this.txtPropertyAddress.Text + "','" +
this.txtNumOfTenants.Text + "','" + this.chkVacant.Checked + "')", con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
答案 0 :(得分:0)
我假设你正在做一个Web表单应用程序,并且你有一个系统登录,因为有多个房东更新了一个属性。
需要注意的事项和最佳实践:
1)由于您有登录,在ASP.Net中有一个名为Sessions的全局变量,您可以保存ID或您必须保存的登录用户的任何重要细节。你可以这样做:
Session["landlordId"] = landlord.Id; //landlord is a class and
//Id is the property inside the class
2)无论您是哪个页面,都可以通过以下方式访问会话:
string loggedUser = (string)(Session["landlordId"]);
//Session["landlordId"].ToString(); or like this
3)始终使用参数化查询来确保安全性(避免SQL注入)ex:
SqlCommand cmd = new SqlCommand("INSERT INTO Properties(Landlord_Id,
Property_Address, Property_Num_Of_Tenants, Property_Vacant) values(@landlordID, @propertyAddress, @propertyNumOfTenants, @propertyVacant)", con);
cmd.Parameters.Add("@landlordID", sqlDbType.Int32).Value = Session["landlordId"].ToString();
//and do the same for other parameters
con.Open();
cmd.ExecuteNonQuery();
con.Close();
如果您按照步骤1和2进行操作,则问题将不再困难。你可以像第3步一样进行插入。不需要连接或复杂的代码只是插入到单个表中。
答案 1 :(得分:0)
这里是基于主外键引用的连接将数据插入到两个表中的存储过程。
首先创建过程
CREATE PROCEDURE spName AS
GO
现在改变程序
ALTER PROCEDURE [dbo].[spName] AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
insert into Table1(Col1, Col2) values (val1,val2) -- put other values here (from parameters?)
insert into Table2(Table1primaryKey, col2, col3) values (SCOPE_IDENTITY(), val2, val3) --Scope_Identity() method will get last inserted primary key of first Table and put other values here (from parameters?) instead of Val1,val2 etc.
SET NOCOUNT OFF;
SET XACT_ABORT OFF;
END
我希望这能解决您的问题,因为它对我有用!