【发布时间】:2009-06-11 16:23:38
【问题描述】:
我有两个数据集问题。
- 如果我更改数据集中的任何单元格,如何在不使用 SQL 更新查询的情况下更新数据库中的此更改?
- 如何在调试模式下查看数据集内容(查看数据)?
【问题讨论】:
我有两个数据集问题。
【问题讨论】:
如果没有 UPDATE 查询,您将无法更新数据库。这就是更新发生的方式。您可以使用将其抽象出来的库,这样您就不必在代码中看到查询,但查询仍然必须发生。
您可以在调试模式下查看数据集的内容,方法是将其添加到您的监视列表并单击小放大镜图标。它会打开一个窗口,让您查看数据集中的表格。
【讨论】:
您可以使用 LINQ 将数据更新到数据库中,而无需使用 T-SQL 更新查询。
【讨论】:
您要查找的是DataAdapter。它将管理更新、删除和插入更改。
【讨论】:
检查此代码并适应您的需求
///<summary>Update Batch records in DataTable</summary>
///<remarks></remarks>
public void UpdateTables(System.Data.DataTable DataTable)
{
if (DataTable.TableName.Length == 0)
{
throw new Exception("The DataTable tablename is nedded.");
}
if (this.State == ConnectionState.Closed)
{
this.Connect();
}
try
{
string strTablename = DataTable.TableName, strSQL;
System.Data.IDbDataAdapter dt = null;
if (DataTable.TableName.Length == 0)
{
throw new Exception("Tablename can't be null.");
}
strSQL = "SELECT * FROM " + strTablename;
if (m_DatabaseType == DatabaseTypeEnum.Access)
{
dt = new System.Data.OleDb.OleDbDataAdapter(strSQL, m_ConnectionString);
System.Data.OleDb.OleDbCommandBuilder cb_a
= new System.Data.OleDb.OleDbCommandBuilder((System.Data.OleDb.OleDbDataAdapter)dt);
dt.InsertCommand = cb_a.GetInsertCommand();
dt.UpdateCommand = cb_a.GetUpdateCommand();
dt.DeleteCommand = cb_a.GetDeleteCommand();
((System.Data.OleDb.OleDbDataAdapter)dt).Update(DataTable);
}
else if (m_DatabaseType == DatabaseTypeEnum.SQLServer)
{
dt = new System.Data.SqlClient.SqlDataAdapter(strSQL, m_ConnectionString);
System.Data.SqlClient.SqlCommandBuilder cb_s
= new System.Data.SqlClient.SqlCommandBuilder((System.Data.SqlClient.SqlDataAdapter)dt);
dt.InsertCommand = cb_s.GetInsertCommand();
dt.UpdateCommand = cb_s.GetUpdateCommand();
dt.DeleteCommand = cb_s.GetDeleteCommand();
((System.Data.SqlClient.SqlDataAdapter)dt).Update(DataTable);
}
else if (m_DatabaseType == DatabaseTypeEnum.Oracle)
{
dt = new System.Data.OracleClient.OracleDataAdapter(strSQL, m_ConnectionString);
System.Data.OracleClient.OracleCommandBuilder cb_o
= new System.Data.OracleClient.OracleCommandBuilder((System.Data.OracleClient.OracleDataAdapter)dt);
dt.InsertCommand = cb_o.GetInsertCommand();
dt.UpdateCommand = cb_o.GetUpdateCommand();
dt.DeleteCommand = cb_o.GetDeleteCommand();
((System.Data.OracleClient.OracleDataAdapter)dt).Update(DataTable);
}
else if (m_DatabaseType == DatabaseTypeEnum.Odbc)
{
dt = new System.Data.Odbc.OdbcDataAdapter(strSQL, m_ConnectionString);
System.Data.Odbc.OdbcCommandBuilder cb_c
= new System.Data.Odbc.OdbcCommandBuilder((System.Data.Odbc.OdbcDataAdapter)dt);
dt.InsertCommand = cb_c.GetInsertCommand();
dt.UpdateCommand = cb_c.GetUpdateCommand();
dt.DeleteCommand = cb_c.GetDeleteCommand();
((System.Data.Odbc.OdbcDataAdapter)dt).Update(DataTable);
}
else
{
throw new NotImplementedException();
}
DataTable.AcceptChanges();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
【讨论】: