首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

数据库更新有关问题

2011-12-20 
数据库更新问题.singSystemusingSystem.DatausingSystem.Data.OleDbusingSystem.XmlusingSystem.Windo

数据库更新问题.
sing   System;
using   System.Data;
using   System.Data.OleDb;
using   System.Xml;  
using   System.Windows.Forms;    
namespace   代码收集
{

public   class   DataBase
{
private   OleDbConnection   conn;
public     OleDbCommand         cmd;
                private   OleDbDataAdapter   adp;

public   DataBase()
{
conn   =   new   OleDbConnection();
cmd   =   new   OleDbCommand();
cmd.Connection   =   conn;  
adp   =   new     OleDbDataAdapter();  
conn.ConnectionString   = "Provider=Microsoft.jet.OLEDB.4.0;Data   Source= "+Application.StartupPath+@ "\db1.mdb;Jet   OLEDB:Database   Password=zhijun123.mpc.cn ";
adp.SelectCommand   =   cmd;
adp.InsertCommand   =   cmd;
adp.DeleteCommand   =   cmd;
adp.UpdateCommand   =   cmd;
conn.Open();  
}
public   DataSet   DataInit()
{
DataSet   ds   =   new   DataSet();  
cmd.CommandText   =   "select   *   from   函数 ";
adp.Fill(ds, "函数 ");
cmd.CommandText   =   "select   *   from   文章 ";
adp.Fill(ds, "文章 ");
cmd.CommandText   =   "select   *   from   代码 ";
adp.Fill(ds, "代码 ");
return   ds;
}
public   void   update(DataSet   ds   ,string   TableName)
{
cmd.CommandText   = "Select   *   from   "+TableName;
                        OleDbDataAdapter   madp   =new   OleDbDataAdapter( "Select   *   from   "+TableName,conn);    
        OleDbCommandBuilder   cb   =   new   OleDbCommandBuilder(madp);
MessageBox.Show(cb.GetInsertCommand().ToString());
madp.UpdateCommand   =   cb.GetUpdateCommand();  
madp.Update(ds,TableName);
ds.AcceptChanges();  
}
}
}
添加过程
private   void   menuItem12_Click(object   sender,   System.EventArgs   e)
{
Form2   ft   =   new   Form2();
if   (ft.ShowDialog(this)==DialogResult.OK)
{
if   (MessageBox.Show( "真的要添加吗? ")==DialogResult.OK)
{

DataTable   dt   =ds.Tables[TableName];
DataRow   dr   =   dt.NewRow();
dr[1]   =   ft.textBox1.Text;
dr[2]   =   this.textBox1.Text;
dt.Rows.Add(dr);
dt.AcceptChanges();    
da.update(ds,TableName);        
ds   =   da.DataInit();  
ListInit();
}
}
}
为什么更新不成功啊。

[解决办法]
写法有问题,给你一个我写的增、删、改的代码:
private SqlConnection sqlCn=null;
private SqlDataAdapter sqlDA=null;
private string m_strCn = "Data Source=(local);Initial Catalog=LineMonitor; "
+ "Integrated Security=SSPI; ";
private string strSql = "Select * from UserManager ";

private SqlCommandBuilder sqlCB = null;


public UserForm()
{
InitializeComponent();

sqlCn = new SqlConnection(m_strCn);
sqlDA = new SqlDataAdapter(strSql, sqlCn);
sqlCB = new SqlCommandBuilder(sqlDA);
sqlDA.Fill(dataSet1, "UserManager ");
}

private void Add_Click(object sender, EventArgs e)
{
try
{
DataTable dt=dataSet1.Tables[ "UserManager "];
DataRow dr = dt.NewRow();
dr[ "UserName "] = UserName.Text;
dr[ "UserTel "] = UserTel.Text;
dr[ "UserAddr "] = UserAddr.Text;
dt.Rows.Add(dr);

sqlDA.Update(dataSet1, "UserManager ");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
sqlCn.Close();
}
}

private void Del_Click(object sender, EventArgs e)
{
string cmdText = string.Format( "delete from UserManager where UserID={0:D} ",Int32.Parse(UserNo.Text));
SqlCommand cmd = new SqlCommand(cmdText, sqlCn);
try
{
sqlCn.Open();
int num = cmd.ExecuteNonQuery();
sqlCn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
sqlCn.Close();
}
cmd.Dispose();
}

private void Edit_Click(object sender, EventArgs e)
{
try
{
DataTable dt = dataSet1.Tables[ "UserManager "];
object findTheseVals = UserNo.Text;
DataColumn[] keys = new DataColumn[1];
DataColumn column = dt.Columns[0];
keys[0] = column;
dt.PrimaryKey = keys;
DataRow dr = dt.Rows.Find(findTheseVals);
string strFilter= "UserID = "+UserNo.Text;
DataRow[] fndRow=dt.Select(strFilter);
fndRow[0][ "UserName "] = UserName.Text;
fndRow[0][ "UserTel "] = UserTel.Text;
fndRow[0][ "UserAddr "] = UserAddr.Text;

sqlDA.Update(dataSet1, "UserManager ");
UpdateDataGrid();
dt.Dispose();
column.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
sqlCn.Close();
}
}

[解决办法]
lz:我把源码都贴出来了,你对比一下啊。。。

关键是主键:

object findTheseVals = UserNo.Text;
DataColumn[] keys = new DataColumn[1];
DataColumn column = dt.Columns[0];
keys[0] = column;
dt.PrimaryKey = keys;
DataRow dr = dt.Rows.Find(findTheseVals);
string strFilter= "UserID = "+UserNo.Text;
DataRow[] fndRow=dt.Select(strFilter);

你查查MSDN,上面也有很清晰说明。

热点排行