C# SqlDataAdapter问题

C# SqlDataAdapter问题,c#,ado.net,C#,Ado.net,我有两张桌子 客户(内部id、nvachar名称(250)、内部年龄) 奖金(int id,int customer\u id参考客户(id),int someAmount) 我需要添加、删除、更新有关客户和奖金的信息 当我添加新客户时,PROGRAM会自动在奖金表中创建有关该客户的新条目。 当我删除客户时,程序会删除表中有关该客户的条目 将其保存到sql数据库时出现问题 我有以下SQL命令: //Bonus SqlCommand inscmdT = new SqlCommand(); insc

我有两张桌子

客户(内部id、nvachar名称(250)、内部年龄)

奖金(int id,int customer\u id参考客户(id),int someAmount)

我需要添加、删除、更新有关客户和奖金的信息

当我添加新客户时,PROGRAM会自动在奖金表中创建有关该客户的新条目。
当我删除客户时,程序会删除表中有关该客户的条目

将其保存到sql数据库时出现问题

我有以下SQL命令:

//Bonus
SqlCommand inscmdT = new SqlCommand();
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id, @someAmount); select id = @@IDENTITY from Bonus";
inscmdT.Connection = conn;
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id");
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount");

SqlCommand updcmdT = new SqlCommand();
updcmdT.CommandText = "UPDATE Bonus SET customer_id = @customer_id, someAmount = @someAmount WHERE id = @id";
updcmdT.Connection = conn;
updcmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id");
updcmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount");
updcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id");

SqlCommand delcmdT = new SqlCommand();
delcmdT.CommandText = "DELETE FROM Bonus WHERE id = @id";
delcmdT.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id");
delcmdT.Connection = conn;


//Customers

SqlCommand inscmdS = new SqlCommand();
inscmdS.CommandText = "Insert into Customers (SessionTime, movie, hall, age) values(@SessionTime, @age); select id = @@IDENTITY from Customers";
inscmdS.Connection = conn;
inscmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime");
inscmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age");

SqlCommand updcmdS = new SqlCommand();
updcmdS.CommandText = "UPDATE Customers SET SessionTime = @SessionTime, age = @age WHERE id = @id ";
updcmdS.Connection = conn;
updcmdS.Parameters.Add("@SessionTime", SqlDbType.NVarChar, 250, "SessionTime");
updcmdS.Parameters.Add("@age", SqlDbType.Int, sizeof(Int32), "age");
updcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id");

SqlCommand delcmdS = new SqlCommand();
delcmdS.CommandText = "DELETE FROM Customers WHERE id = @id";
delcmdS.Parameters.Add("@id", SqlDbType.Int, sizeof(Int32), "id");
delcmdS.Connection = conn;

如何在删除、插入、更新时正确写入SqlDataAdapter?

SqlDataAdapter用于根据select查询填充数据集。这不是你想要的

相反,继续使用SqlCommand对象,使用引用的ExecuteOnQuery()方法

因此,您的代码如下所示:

//Bonus
SqlCommand inscmdT = new SqlCommand();
inscmdT.CommandText = "Insert into Bonus (customer_id, someAmount) values(@customer_id,     @someAmount); select id = @@IDENTITY from Bonus";
inscmdT.Connection = conn;
inscmdT.Parameters.Add("@customer_id", SqlDbType.Int, sizeof(Int32), "customer_id");
inscmdT.Parameters.Add("@someAmount", SqlDbType.Int, sizeof(Int32), "someAmount");
inscmdT.ExecuteNonQuery();

等等。

更改数据集后,调用
SqlDataAdapter.Update(数据集)
。只要设置了正确的命令。您已经设置好的,只需要分配

SqlDataAdpater.DeleteCommand = delCMDT;
SqlDataAdapter.UpdateCOmmand = updCMT;
SQlDataAdapter.InsertCommand = incmdT
如果您可以使用VisualStudio创建一个类型化数据集,这将比为您完成所有这些工作要容易得多。基于您的数据库模式。此外,我不确定poarams如何处理非类型化数据集,因为我总是使用类型化数据集。你可以让自己变得非常乏味


解决方案是对表客户使用级联删除。

问题是更新表。当我添加新客户时,首先必须更新客户表,然后更新奖金表。当我删除客户时,首先从奖金表中删除条目,然后从客户表中删除条目。如果我按错误的顺序进行操作,则外键有问题。@user2963950-对,您会的。您将需要2个SqlDataAdapters。您正在使用Visual studio吗?你能用它连接到数据库吗?这将大大简化这一过程。无论如何,我会设置一个类似dataAdapterManager的包装类来处理调用update和填充的顺序参数化查询“(@name nvarchar(250),@age int)Inse”需要未提供的参数“@name”。是否使用Visual Studio?