数据库更新问题.
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,上面也有很清晰说明。