当前位置: 首页 > 面试题库 >

使用SqlDataAdapter插入行

柴瀚昂
2023-03-14
问题内容

我想使用SqlDataAdapter将行插入数据库。我在CustomerOrders数据库中有2个表(Custormers和Orders),并且有上千条记录。我想创建一个GUI(TextBoxes),用于将新客户和订单添加到数据库中的相应表中。

  • 我该怎么办?

我猜通常遵循的方法是

dataAdapter = new SqlDataAdapter (sqlQuery, conn);
dataSet = new DataSet();
da.Fill(dataSet);

现在,从文本框中获取值(或使用DataBinding)将新行添加到dataSet中并调用

  da.Update(dataSet);

但是问题是为什么我首先应该使用da.Fill(dataSet)将所有其他记录提取到dataSet中?我只想添加一条新记录。

为此,我正在做的是在DataSet中创建数据库的架构。像这样:

  DataSet customerOrders = new DataSet("CustomerOrders");

  DataTable customers = customerOrders.Tables.Add("Customers");
  DataTable orders = customerOrders.Tables.Add("Orders");

  customers.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  customers.Columns.Add("FirstName", Type.GetType("System.String"));
  customers.Columns.Add("LastName", Type.GetType("System.String"));
  customers.Columns.Add("Phone", Type.GetType("System.String"));
  customers.Columns.Add("Email", Type.GetType("System.String"));

  orders.Columns.Add("CustomerID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderID", Type.GetType("System.Int32"));
  orders.Columns.Add("OrderAmount", Type.GetType("System.Double"));
  orders.Columns.Add("OrderDate", Type.GetType("System.DateTime"));

  customerOrders.Relations.Add("Cust_Order_Rel", customerOrders.Tables["Customers"].Columns["CustomerID"], customerOrders.Tables["Orders"].Columns["CustomerID"]);

我使用DataBinding将这些列绑定到相应的文本框。现在我很困惑!接下来我该怎么办?如何使用插入命令?因为我没有提供任何dataAdapter.SelectCommand,所以我猜dataAdapter.Update()不能工作。请提出正确的方法。


问题答案:

使用“ 0 = 1”过滤器设置选择命令,并使用SqlCommandBuilder,以便自动为您生成insert命令。

var sqlQuery = "select * from Customers where 0 = 1";
dataAdapter = new SqlDataAdapter(sqlQuery, conn);
dataSet = new DataSet();
dataAdapter.Fill(dataSet);

var newRow = dataSet.Tables["Customers"].NewRow();
newRow["CustomerID"] = 55;
dataSet.Tables["Customers"].Rows.Add(newRow);

new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet);


 类似资料:
  • 问题内容: 我正在创建类似小型收银员应用程序的应用程序,该应用程序会为客户,员工,服务,销售和约会保留记录。我正在使用Windows窗体,并且在该DataGrids中。我已经创建了将用于该应用程序的数据库。我想知道是否应该使用SqlCommand- SqlDataReader或SqlDataAdapter-DataSet。哪种方法更好? 问题答案: 这在很大程度上取决于您想要的操作类型。 以下是我

  • 问题内容: 是否可以使用一个insert语句在一个表中插入多行?我知道如果发生以下情况,将会发生这种情况: 但是,如果我想插入: 只需一个插入命令? 问题答案: 两种解决方案(来源:http : //appsfr.free.fr/spip.php?article21): 或者

  • 问题内容: 如何使用在mySQL上运行的JdbcTemplate以可扩展的方式执行以下SQL 。在这种情况下,可伸缩意味着: 服务器上仅执行一条SQL语句 它适用于任何数量的行。 声明如下: 假设我有一个带有和字段的POJO列表。我意识到我可以遍历列表并执行: 但这并不能满足第一个条件。 我相信我也可以执行: 但是据我所知,这只会编译一次SQL并多次执行它,从而再次使第一个条件失败。 似乎通过了这

  • 问题内容: 我有两个表声明如下: 我想用一些值填充liquibase changelog文件中的两个表: 在此示例中,由于简单起见,我使用了aaaa和bbbb。我想通过DBMS生成那些UUID。 最好的方法是什么?我必须在变更日志文件中使用SQL还是可以在XML中使用?我更喜欢DBMS独立解决方案,例如XML或JSON。 我的第二个问题是,如何声明带有UUID的列,该列会在插入时创建UUID。就像

  • 问题内容: 我正在掌握PDO的基础知识。 但是我试图获取插入的行的ID,我使用: 我遇到的教程都是关于交易的,但是我没有使用交易! 问题答案: 您可能正在寻找lastInsertId。“返回最后插入的行或序列值的ID”。

  • 问题内容: 我有这句话: 我正在尝试插入值,复制item_costprice的相同数据,但显示错误: 我该如何解决? 问题答案: 在语句中使用带别名的数字文字。组件周围不需要。 请注意,在的上下文中,别名实际上不是必需的,您可以使用,但是通常情况下,您将需要别名来访问返回的列。