我是刚学C#,大概的语句如下 OracleConnection conn = new OracleConnection("Data Source=TT;User ID=TTTest;Password=11111"); OracleDataAdapter adapter = new OracleDataAdapter("select a.*,b.* from student a,class b where a.classid=b.classid",conn); OracleCommandBuilder builder = new OracleCommandBuilder(adapter); 数据可以显示在dataGridView中,就是不可以更新,但是dataAdapter查询单表是可以更新的 赐教下 TKS!
To:amandag(高歌) 举个例子: SELECT [id], [stuNo],(SELECT [name] FROM [majors] WHERE [no] = [stu].[majorId]) AS 专业 FROM [stu] 这样的查询语句查询出来的[专业]列,我修改了,怎么更新数据库?借LZ的帖子问一个,谢谢了~
yourds.AcceptChanges();
yourds.AcceptChanges();这个好像只能修改一个表的查询吧
但是我想这样的查询会很多 那样建立视图会很不方便
以前是用delphi开发的 它可以修改数据 然后直接写到数据库
不知道在C#里有什么类似的方法 万分感谢
yourds.AcceptChanges();
================================
更新整个数据集,数据集里更改过的表都会提交更改
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OleDb;
using System.Data.SqlClient;public class DataRelationsExample : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid dgrdCustomers, dgrdOrders;
DataSet ds;
SqlConnection sqlCn;
SqlDataAdapter custAdapter;
OleDbConnection oleDbCn;
OleDbDataAdapter orderAdapter; private void MakeData()
{
ds = (DataSet)Cache.Get("myDataSet"); if(ds == null)
{
ds = new DataSet(); sqlCn.Open();
custAdapter.Fill(ds, "Customers");
sqlCn.Close();
oleDbCn.Open();
orderAdapter.Fill(ds, "Orders");
oleDbCn.Close(); ds.Tables["Customers"].PrimaryKey = new DataColumn[]{ds.Tables["Customers"].Columns["CustomerID"]};
ds.Tables["Orders"].PrimaryKey = new DataColumn[]{ds.Tables["Orders"].Columns["订单ID"]}; DataRelation custOrderRel = ds.Relations.Add("CustomersToOrders",
ds.Tables["Customers"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["客户ID"]);
Cache.Insert("myDataSet", ds);
}
}
private void BindData()
{
dgrdCustomers.DataSource = ds.Tables["Customers"];
dgrdOrders.DataSource = ds.Tables["Orders"];
Page.DataBind();
} protected void Page_Load(object sender, EventArgs e)
{
//数据库中两张表必须有主键
sqlCn = new SqlConnection(@"server=.;database=Northwind;uid=sa;pwd=sa;");
custAdapter = new SqlDataAdapter("SELECT CustomerID, CompanyName, ContactName, ContactTitle FROM CustomersCopy ORDER BY CustomerID", sqlCn);
oleDbCn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("northwind.mdb"));
orderAdapter = new OleDbDataAdapter("SELECT 订单ID, 客户ID, 订购日期, 到货日期, 发货日期 FROM 订单Copy ORDER BY 客户ID", oleDbCn);
if(!Page.IsPostBack)
{
Cache.Remove("myDataSet");
}
MakeData();
if(!Page.IsPostBack)
{
BindData();
}
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.dgrdCustomers.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgrdCustomers_DeleteCommand);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void dgrdCustomers_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
DataRow tempRow = ds.Tables["Customers"].Rows.Find(e.Item.Cells[1].Text);
tempRow.Delete();
//使用CommandBuilder对象自动产生insert,update,delete语句
//使用时的两个约束
//1.必须指定一条select命令(可以在DataAdapter构造函数里指定,也可以使用SelectCommand属性指定)
//2.必须指定至少一个主键或唯一的列作为Select命令里必需的列
//由CommandBuilder建立的Update语句含有一个Where条件,仅在Fill方法最后一次被调用后列的所有值
//都没有被更改过时才更新记录
SqlCommandBuilder sqlCb = new SqlCommandBuilder(custAdapter);
OleDbCommandBuilder oleDbCb = new OleDbCommandBuilder(orderAdapter);
//只查询改变的行(仅仅是改变了的记录在网络上传递)
DataSet dsChanges = ds.GetChanges();
if (dsChanges != null)
{
oleDbCn.Open();
orderAdapter.DeleteCommand = oleDbCb.GetDeleteCommand();
//更新数据库
orderAdapter.Update(dsChanges, "Orders");
oleDbCn.Close();
sqlCn.Open();
custAdapter.DeleteCommand = sqlCb.GetDeleteCommand();
custAdapter.Update(dsChanges, "Customers");
sqlCn.Close();
}
ds.AcceptChanges();
Cache.Insert("myDataSet", ds);
BindData();
}
}
OracleConnection conn = new OracleConnection("Data Source=TT;User ID=TTTest;Password=11111");
OracleDataAdapter adapter = new OracleDataAdapter("select a.*,b.* from student a,class b where a.classid=b.classid",conn);
OracleCommandBuilder builder = new OracleCommandBuilder(adapter);
数据可以显示在dataGridView中,就是不可以更新,但是dataAdapter查询单表是可以更新的
赐教下 TKS!
SELECT [id], [stuNo],(SELECT [name] FROM [majors] WHERE [no] = [stu].[majorId]) AS 专业 FROM [stu]
这样的查询语句查询出来的[专业]列,我修改了,怎么更新数据库?借LZ的帖子问一个,谢谢了~
我的意思是一次查询里包含两个表
比如 select a.*,b.* from a,b where a.id=b.id
这个查询里有包含两个表的字段,我知道查询出来没问题
但是就是不知道怎样更新到数据库中
怎样更新 webForm winform 用什么控件 都无所谓
最主要是能完成更新功能就好
的查询怎样更新
from yourtablea a,yourtableb b where a.id=b.id
这样就可以了。
但是修改数据是放给用户修改的 一般是在DataGridView里修改的
等用户修改好了再提交 这样的话就不能写Update语句吧
难道还要自己去对用户修改的数据构造update语句?
其实不管你用什么方法,还会用上update的.
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx