如何在insert语句和sql server C#Asp.net中使用连接

时间:2017-11-02 22:03:21

标签: c# sql asp.net sql-server join

所以我有两张桌子,房东和财产。 我正在尝试将数据插入到我的属性表中,但是我必须输入当时登录的任何人的房东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();

2 个答案:

答案 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

我希望这能解决您的问题,因为它对我有用!