我在C#和SQL Server 2005中自学
我在SQL Server 2005中有3个表,我在C#中有一个表单,接受要保存在数据库中的输入。
我的3张桌子是
Hotel
列Hotel No, Hotel Name, Location
Guest
列Guest No, Guest Name, Address
Room
列Room No Room Type, Room Price
和所有三个表相遇的联结表
Booking
Hotel No, Guest No, Room No, Date From, Date To
我设置了酒店号,客人号,房间号是预订表的外键的关系
在我的C#表单中,我有一个代码填充了酒店名称和房间类型的组合框
private void FillComboBoxHotelName()
{
conn.Open();
SqlCommand cmd1 = new SqlCommand("SELECT * FROM Hotel", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
da.SelectCommand.CommandText = cmd1.CommandText.ToString();
DataTable dt = new DataTable();
da.Fill(dt);
cmbHotelName.DataSource = dt;
cmbHotelName.DisplayMember = "Hotel Name";
cmbHotelName.ValueMember = "HotelNo";
conn.Close();
}
private void FillComboBoxRoomType()
{
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT * FROM Room", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.SelectCommand.CommandText = cmd.CommandText.ToString();
DataTable dt = new DataTable();
da.Fill(dt);
cmbRoomType.DataSource = dt;
cmbRoomType.DisplayMember = "Room Type";
cmbRoomType.ValueMember = "RoomNo";
conn.Close();
}
此代码有效,我在酒店和房间的表格中的记录填写了我的表单中的组合框,我现在的问题是如何将表单中的输入值存储到我的数据库中。我是否需要为每个表创建单独的Insert查询命令,因为数据将转到3个表,我很遗憾。
我的表单如下:
Hotel Name : Combo Box
Guest Name:
Guest Address:
Date From:
Date To:
Room Type:
Button (Save)
请帮助我仍然无法发布图片。
答案 0 :(得分:1)
实现它的方法有两种:插入语句和存储过程。
插入强>
string sql = "INSERT INTO Hotel (Hotel No, Hotel Name, Location) values (@HotelNo,@HotelName,@Location)";
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@HotelNo", SqlDbType.Int);
cmd.Parameters.Add("@HotelName", SqlDbType.VarChar);
cmd.Parameters.Add("@Location", SqlDbType.VarChar);
cmd.Parameters["@HotelNo"].Value = HotelNo; // Hotel number name in Int
cmd.Parameters["@HotelName"].Value = HotelName;//Hotel Name in string
cmd.Parameters["@Location"].Value = Location;//Location in form of text
cmd.ExecuteNonQuery();
注意:在代码中我假设酒店No是Int,酒店名称是VarChar,Location是VarChar。
以类似的方式,您可以为其余2个表创建Insert语句,并将代码插入2个表中。
存储过程
为要插入数据库的所有列创建存储过程。像
CREATE PROCEDURE yourInsertOperation
-- Add the parameters for the stored procedure here
@HotelNo INT,
@HotelName VARCHAR(20),
@Location VARCHAR(20),
--......rest of all your parameter list goes here
AS
BEGIN
INSERT INTO resourceTable(column1, column2) VALUES (@HotelNo, @HotelName, @Location )
--Other 2 insert statements will go here
End
Go
存储过程在数据库中就绪后。您可以将该存储过程与C#代码中的参数一起调用。
SqlCommand cmd = new SqlCommand("yourInsertOperation",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@HotelNo", SqlDbType.Int);
cmd.Parameters.Add("@HotelName", SqlDbType.VarChar);
cmd.Parameters.Add("@Location", SqlDbType.VarChar);
//Other columns to insert will go here
cmd.Parameters["@HotelNo"].Value = HotelNo; // Hotel number name in Int
cmd.Parameters["@HotelName"].Value = HotelName;//Hotel Name in string
cmd.Parameters["@Location"].Value = Location;//Location in form of text
//Values for columns will go here
cmd.ExecuteNonQuery();
总结一下,我建议您使用Insert查询,因为它可以轻松快捷地插入数据库。在此,您不必为创建SP付出努力。但是你仍然可以选择使用任何一种或两种方法作为学习目的。
答案 1 :(得分:0)
有多种方法可以解决您的问题:
在表格中插入时创建触发器将填充其余相关表格
在每个涉及的表中为您的C#插入SQL,而不是最好的方法,但可以完成。
构建存储过程以按顺序插入所有4个表。从您的C#代码中调用此SP。
我更喜欢按优先顺序使用3个或1个选项。