C# 将dataset更改保存到数据源

fanghuajuedai 2011-04-15 05:02:32
首先声明我是新手,因毕设而接触C#编程。其中涉及到数据库操作。以下是我写的一段程序,用于在数据源中插入一行新数据。但是执行后数据源没有变化。望高手指点指点,小弟在此先谢过了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;
namespace access
{
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.MyMethod();
Console.ReadLine();
}
class MyClass
{
public MyClass()
{
Console.WriteLine("测试类");
}
public void MyMethod()
{
try
{
string connstr = @"Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=Savemodelone.mdb";
OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter(@"select * from Savemodelone", connstr);
OleDbCommandBuilder builder = new OleDbCommandBuilder(da);
DataSet dt=new DataSet("Savemodelone");
da.Fill(dt,"Savemodelone");
DataTable ds = dt.Tables["savemodelone"];
DataRow dm = ds.NewRow();
dm["生产数量"] = 1;
dm["重量"] = 1;
dm["体积"] = 1;
dm["机械重量"] = 1;
dm["PLTFM"] = 1;
dm["电子复杂度"] = 1;
dm["HSINT"] = 1;
dm["机械复杂度"] = 1;
dm["估算成本"] = 8;
ds.Rows.Add(dm);

string Insert = @"insert into Savemodelone(生产数量,重量,体积,机械重量,PLTFM,电子复杂度,HSINT,机械复杂度,估算成本)values(@生产数量,@重量,@体积,@机械重量,@PLTFM,@电子复杂度,@HSINT,@机械复杂度,@估算成本)";
OleDbCommand insert = new OleDbCommand(Insert, conn);
insert.Parameters.Add("@生产数量", OleDbType.VarChar, 10, "生产数量");
insert.Parameters.Add("@重量", OleDbType.VarChar, 10, "重量");
insert.Parameters.Add("@体积", OleDbType.VarChar, 10, "体积");
insert.Parameters.Add("@机械重量", OleDbType.VarChar, 10, "机械重量");
insert.Parameters.Add("@PLTFM", OleDbType.VarChar, 10, "PLTFM");
insert.Parameters.Add("@电子复杂度", OleDbType.VarChar, 10, "电子复杂度");
insert.Parameters.Add("@HSINT", OleDbType.VarChar, 10, "HSINT");
insert.Parameters.Add("@机械复杂度", OleDbType.VarChar, 10, "机械复杂度");
insert.Parameters.Add("@估算成本", OleDbType.VarChar, 10, "估算成本");
da.InsertCommand = insert;
da.Update(dt,"Savemodelone");
Console.WriteLine("连接成功");
OleDbCommand comm= new OleDbCommand("select * from Savemodelone",conn);
conn.Open();
OleDbDataReader dr = comm.ExecuteReader();
dr.Read();
Console.Write("ID");
Console.Write("\t");
Console.Write("生产数量");
Console.Write("\t");
Console.Write("重量");
Console.Write("\t");
Console.Write("体积");
Console.Write("\t");
Console.Write("机械重量");
Console.Write("\t");
Console.Write("PLTFM");
Console.Write("\t");
Console.Write("电子复杂度");
Console.Write("\t");
Console.Write("HSINT");
Console.Write("\t");
Console.Write("机械复杂度");
Console.Write("\t");
Console.Write("估算成本");
Console.Write("\t");

while (dr.Read())
{
Console.Write(dr[0].ToString());
Console.Write("\t");
Console.Write(dr[1].ToString());
Console.Write("\t");
Console.Write(dr[2].ToString());
Console.Write("\t");
Console.Write(dr[3].ToString());
Console.Write("\t");
Console.Write(dr[4].ToString());
Console.Write("\t");
Console.Write(dr[5].ToString());
Console.Write("\t");
Console.Write(dr[6].ToString());
Console.Write("\t");
Console.Write(dr[7].ToString());
Console.Write("\t");
Console.Write(dr[8].ToString());
Console.Write("\t");
Console.Write(dr[9].ToString());
Console.Write("\t");

}

conn.Close();
dt.Clear();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
}
...全文
525 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
香椿炒鸡蛋 2011-04-21
  • 打赏
  • 举报
回复
和主键没关系,只要你的sql语句没有包含主键是不会有问题的。。
fanghuajuedai 2011-04-21
  • 打赏
  • 举报
回复
还是没成功,不知是不是与数据库的主键有关,我的主键是默认的ID
rocket2010 2011-04-19
  • 打赏
  • 举报
回复
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["***"]);
try
{
con.Open();
string sele = "select * from ***";
SqlDataAdapter com = new SqlDataAdapter(sele, con);
SqlCommandBuilder upcom = new SqlCommandBuilder(com);
DataSet dj = new DataSet();
com.Fill(dj);
DataTable talbe = new DataTable();
talbe = dj.Tables[0];
DataRow row = talbe.NewRow();
row["**"]=a;
row["**"] = DateTime.Now;
talbe.Rows.Add(row);
com.Update(dj);
}
finally
{
con.Close();
}


对!这个就可以的啦 尤其是: SqlCommandBuilder upcom = new SqlCommandBuilder(com);
是不能少的……
Daqing 2011-04-19
  • 打赏
  • 举报
回复
哦,对不住,你的查询语句有问题。
select * from Savemodelone
改成

select  生产数量,重量,体积,机械重量,PLTFM,电子复杂度,HSINT,机械复杂度,估算成本 from Savemodelone
cnxry 2011-04-18
  • 打赏
  • 举报
回复
直接调用SqlCommand实例的ExcuteNonQuery方法传入sql语句做为参数就可以



cmd.ExcuteNonQuery("insert 表名(字段,字段)Values(值,值)");
fanghuajuedai 2011-04-18
  • 打赏
  • 举报
回复
请问Tsapi,上面的程勋代码是附加在原代码之后还是覆盖原代码。
Daqing 2011-04-18
  • 打赏
  • 举报
回复
      public DataSet Insert_Sdp()
{
SqlConnection con = new SqlConnection(Configuration.Conn);
SqlDataAdapter sdp = new SqlDataAdapter();
DataSet dt = new DataSet();
SqlCommand comm = new SqlCommand();

comm.Connection = con;
comm.CommandText = "select Names,Address,Pid,Image from Users";
sdp.SelectCommand = comm;//首先要指定selectitem,并且字段要制定清楚,和insert字段个数和名称一直
SqlCommandBuilder scom = new SqlCommandBuilder(sdp);
sdp.Fill(dt, "Users");



comm.CommandText = "Insert into Users values(@Pid,@Names,@Address,@Image)";
SqlParameter[] pars = new SqlParameter[] {
new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
,new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
,new SqlParameter("@Address",SqlDbType.NVarChar,20,"Address")
,new SqlParameter("@Image",SqlDbType.Image,200,"Image")
};

foreach (SqlParameter par in pars)
{
comm.Parameters.Add(par);
}//update不用给parameters赋值

DataRow dr = null;
for (int i = 7; i < 10; i++)
{
dr = dt.Tables[0].NewRow();
dr["Names"] = "Jeep" + i.ToString();
dr["Address"] = "第" + i.ToString() + "街道";
dr["Pid"] = i+8;
dt.Tables[0].Rows.Add(dr);
}//通过对表值的修改,实现方法Update(table)

SqlCommandBuilder icom = new SqlCommandBuilder(sdp);
sdp.InsertCommand = comm;//insert com语句
sdp.Update(dt.Tables["Users"]);
dt.AcceptChanges();
return dt;
}


把我的sql改成oledb的空间,方法一样,验证成功的了。
fanghuajuedai 2011-04-18
  • 打赏
  • 举报
回复
还是无法插入到数据源啊。不过还是很感谢,谢谢!
Daqing 2011-04-18
  • 打赏
  • 举报
回复
 public void MyMethod()
{
try
{
string connstr = @"Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=Savemodelone.mdb";
OleDbConnection conn = new OleDbConnection(connstr);
OleDbCommand Selectcom=new OleDbCommand();
Selectcom.CommandText=(@"select * from Savemodelone");
Selectcom.Connection=conn;
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand=Selectcom;

OleDbCommandBuilder sbuilder = new OleDbCommandBuilder(da);
DataSet dt=new DataSet("Savemodelone");
da.Fill(dt,"Savemodelone");



DataTable ds = dt.Tables["savemodelone"];
DataRow dm = ds.NewRow();
dm["生产数量"] = 1;
dm["重量"] = 1;
dm["体积"] = 1;
dm["机械重量"] = 1;
dm["PLTFM"] = 1;
dm["电子复杂度"] = 1;
dm["HSINT"] = 1;
dm["机械复杂度"] = 1;
dm["估算成本"] = 8;
ds.Rows.Add(dm);

string Insert = @"insert into Savemodelone(生产数量,重量,体积,机械重量,PLTFM,电子复杂度,HSINT,机械复杂度,估算成本)values(@生产数量,@重量,@体积,@机械重量,@PLTFM,@电子复杂度,@HSINT,@机械复杂度,@估算成本)";

OleDbCommand insert = new OleDbCommand(Insert, conn);

insert.Parameters.Add("@生产数量", OleDbType.VarChar, 10, "生产数量");
insert.Parameters.Add("@重量", OleDbType.VarChar, 10, "重量");
insert.Parameters.Add("@体积", OleDbType.VarChar, 10, "体积");
insert.Parameters.Add("@机械重量", OleDbType.VarChar, 10, "机械重量");
insert.Parameters.Add("@PLTFM", OleDbType.VarChar, 10, "PLTFM");
insert.Parameters.Add("@电子复杂度", OleDbType.VarChar, 10, "电子复杂度");
insert.Parameters.Add("@HSINT", OleDbType.VarChar, 10, "HSINT");
insert.Parameters.Add("@机械复杂度", OleDbType.VarChar, 10, "机械复杂度");
insert.Parameters.Add("@估算成本", OleDbType.VarChar, 10, "估算成本");
OleDbCommandBuilder builder = new OleDbCommandBuilder(da);
da.InsertCommand = insert;
da.Update(dt,"Savemodelone");
Console.WriteLine("连接成功");
...............
fanghuajuedai 2011-04-18
  • 打赏
  • 举报
回复
好的,谢谢。方便的话发我邮箱吧:rongshuanglong@gmail.com。
再次感谢!
Daqing 2011-04-18
  • 打赏
  • 举报
回复
我在自己电脑上做了一个和你功能一样的。等下,我给你写好,直接发过来
fanghuajuedai 2011-04-17
  • 打赏
  • 举报
回复
首先感谢各位在百忙中抽空帮助小弟,我试了各位给的指导方法,反复运行程序,窗体显示记录是增加的,但是数据源还是没有插入新数据。恳请各位大侠帮我看看,问题出在哪,小弟在此不甚感激!
Daqing 2011-04-16
  • 打赏
  • 举报
回复
 public void MyMethod()
{
try
{
string connstr = @"Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=Savemodelone.mdb";
OleDbConnection conn = new OleDbConnection(connstr);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter();
OleDbCommand comquery= new OleDbCommand(@"select 生产数量,重量,体积,机械重量,PLTFM,电子复杂度,HSINT,机械复杂度,估算成本 from Savemodelone", connstr);//这里的列要和插入的列一一对应
da.SelectCommand=comquery;
OleDbCommandBuilder builder = new OleDbCommandBuilder(da);
DataSet dt=new DataSet("Savemodelone");
da.Fill(dt,"Savemodelone");
DataTable ds = dt.Tables["savemodelone"];
DataRow dm = ds.NewRow();
dm["生产数量"] = 1;
dm["重量"] = 1;
dm["体积"] = 1;
dm["机械重量"] = 1;
dm["PLTFM"] = 1;
dm["电子复杂度"] = 1;
dm["HSINT"] = 1;
dm["机械复杂度"] = 1;
dm["估算成本"] = 8;
ds.Rows.Add(dm);

string Insert = @"insert into Savemodelone(生产数量,重量,体积,机械重量,PLTFM,电子复杂度,HSINT,机械复杂度,估算成本)values(@生产数量,@重量,@体积,@机械重量,@PLTFM,@电子复杂度,@HSINT,@机械复杂度,@估算成本)";
OleDbCommand insert = new OleDbCommand(Insert, conn);
insert.Parameters.Add("@生产数量", OleDbType.VarChar, 10, "生产数量");
insert.Parameters.Add("@重量", OleDbType.VarChar, 10, "重量");
insert.Parameters.Add("@体积", OleDbType.VarChar, 10, "体积");
insert.Parameters.Add("@机械重量", OleDbType.VarChar, 10, "机械重量");
insert.Parameters.Add("@PLTFM", OleDbType.VarChar, 10, "PLTFM");
insert.Parameters.Add("@电子复杂度", OleDbType.VarChar, 10, "电子复杂度");
insert.Parameters.Add("@HSINT", OleDbType.VarChar, 10, "HSINT");
insert.Parameters.Add("@机械复杂度", OleDbType.VarChar, 10, "机械复杂度");
insert.Parameters.Add("@估算成本", OleDbType.VarChar, 10, "估算成本");
da.InsertCommand = insert;
SqlCommandBuilder scom = new SqlCommandBuilder(da);
da.Update(dt,"Savemodelone");
Console.WriteLine("连接成功");

OleDbCommand comm= new OleDbCommand("select * from Savemodelone",conn);
conn.Open();
OleDbDataReader dr = comm.ExecuteReader();
}


这样应该就没问题了,有问题继续解决
MSDNXGH 2011-04-15
  • 打赏
  • 举报
回复
这样做就行了
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["***"]);
try
{
con.Open();
string sele = "select * from ***";
SqlDataAdapter com = new SqlDataAdapter(sele, con);
SqlCommandBuilder upcom = new SqlCommandBuilder(com);
DataSet dj = new DataSet();
com.Fill(dj);
DataTable talbe = new DataTable();
talbe = dj.Tables[0];
DataRow row = talbe.NewRow();
row["**"]=a;
row["**"] = DateTime.Now;
talbe.Rows.Add(row);
com.Update(dj);
}
finally
{
con.Close();
}
这样子就可以,但一般,我们都不用这个来操作,当然这个也可以,一般都用sqlcommand进行操作
Daqing 2011-04-15
  • 打赏
  • 举报
回复
这些变量没有赋值,
insert.Parameters.Add("@生产数量", OleDbType.VarChar, 10, "生产数量");
insert.Parameters.Add("@重量", OleDbType.VarChar, 10, "重量");
insert.Parameters.Add("@体积", OleDbType.VarChar, 10, "体积");
insert.Parameters.Add("@机械重量", OleDbType.VarChar, 10, "机械重量");
insert.Parameters.Add("@PLTFM", OleDbType.VarChar, 10, "PLTFM");
insert.Parameters.Add("@电子复杂度", OleDbType.VarChar, 10, "电子复杂度");
insert.Parameters.Add("@HSINT", OleDbType.VarChar, 10, "HSINT");
insert.Parameters.Add("@机械复杂度", OleDbType.VarChar, 10, "机械复杂度");
insert.Parameters.Add("@估算成本", OleDbType.VarChar, 10, "估算成本");
你参考下我写的。


   SqlParameter[] pars = new SqlParameter[] { 
new SqlParameter("@Pid",SqlDbType.Int,4,"Pid")
,new SqlParameter("@Names",SqlDbType.VarChar,10,"Names")
,new SqlParameter("@Address",SqlDbType.NVarChar,20,"Address")
};

pars[0].Value = names;
pars[1].Value = address;
pars[2].Value = pid;


foreach (SqlParameter par in pars)
{
insert.Parameters.Add(par);
}

sdp.InsertCommand = comm;
SqlCommandBuilder scom = new SqlCommandBuilder(sdp);//这句话是必要的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧