C# 如何将记录插入数据库中的多个表中
我正在自学C#和SQL Server 2005 我在SQLServer2005中有3个表,在C#中有一个表单,它接受要保存在数据库中的输入 我的3张桌子是C# 如何将记录插入数据库中的多个表中,c#,sql-server,C#,Sql Server,我正在自学C#和SQL Server 2005 我在SQLServer2005中有3个表,在C#中有一个表单,它接受要保存在数据库中的输入 我的3张桌子是 酒店带列酒店编号、酒店名称、位置 Guest带列客人编号、客人姓名、地址 房间带列房间无房间类型,房间价格 和一张三张桌子交汇处的连接桌 预订酒店号、客人号、房间号、日期从、日期到 我设置了酒店号、客人号、房间号是预订表外键的关系 在我的C#表单中,我有一个代码填充酒店名称和房间类型的组合框 private void FillComb
带列酒店
酒店编号、酒店名称、位置
带列Guest
客人编号、客人姓名、地址
带列房间
房间无房间类型,房间价格
预订
酒店号、客人号、房间号、日期从、日期到
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();
}
这段代码可以工作,我在Hotel和in Room的表中的记录填充了我表单中的组合框,我现在的问题是如何将表单中的输入值存储到数据库中。我是否需要为每个表创建一个单独的Insert查询命令,因为数据将进入3个表,我处于丢失状态
我的表单如下所示:
Hotel Name : Combo Box
Guest Name:
Guest Address:
Date From:
Date To:
Room Type:
Button (Save)
请帮助我仍然无法发布图像。有多种方法可以解决您的问题:
我希望按照优先顺序使用3个或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();
注意:在代码中,我假设Hotel No是Int,Hotel Name是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#代码中的参数
总而言之,我建议您使用Insert查询,因为它可以方便快捷地插入到数据库中。在这方面,您不必在创建SP上下功夫,但您仍然可以选择使用任何一种或两种方法来实现学习目的 我尝试在中为每个表插入一个insert SQL命令,但没有插入任何记录,并引发一个常规异常“名称附近的语法不正确”,我将在何处构建SP?在SQL Server 2005或C#中,我将在“保存”按钮中调用该方法显示insert语句以及编码。。存储过程和触发器是SQL Server的一部分。还有一件事,您的列名不应该是两个字,像使用Room_No一样使用它以避免不必要的麻烦。private void StoreGuest(){conn.Open();SqlCommand InsertCommand=new SqlCommand(“插入到Guest(Guest Name,Location)值(“+txtGuestName.Text+”,“+txtGuestAddress.Text+”),conn);InsertCommand.Connection=conn;InsertCommand.ExecuteOnQuery();conn.Close();(用于来宾输入的我的插入方法)正如我所怀疑的:客人的名字应该是Guest\u Name OK我会在db中将Guest\u Name改为Guest\u Name,如果问题解决了,我会留言,谢谢,我会试试这个,你的权利我的酒店号是INT,位置是VARCHARI我还有一个问题,关于我的酒店号,在我的表格中我没有酒店号,我只有酒店名在组合框中,我根据数据库中的数据填充了组合框,所以如果我不在C#中的insert sql命令中包含它,可以吗?谢谢。在这种情况下,您不必在C#中包含Hotel No作为参数。我刚刚尝试了您建议的第一个选项cmd.Parameters.Add(“@HotelName”,SqlDbType.VarChar);和cmd.Parameters[“@HotelName”].Value=HotelName;//字符串中的HotelName我将HotelName替换为cmbHotelName.SelectedValue因为我的HotelName是一个组合框,然后我注释掉HotelNo和位置,当我运行程序时,它返回一个Sql异常“varchar附近的语法不正确\ Name附近的语法不正确”,感谢有多种可能出现“语法错误”。1)Check提供了所有必要的列以插入,如HotelName(如果您在Hotel中有Location列)2)因为错误表明您可能在insert语句中发送了一些不正确的字符
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();