private DataSet ds = new DataSet();
private DataTable dt;
private void Form1_Load(object sender, System.EventArgs e)
{
client.Connect("127.0.0.1",1008);
DataColumn dc = new DataColumn("long",typeof(double));
dt.Columns.Add(dc);
dc = new DataColumn("lati",typeof(double));
dt.Columns.Add(dc);
client.ReceivedDatagram+=new NetEvent(client_ReceivedDatagram);
Thread thread=new Thread(new ThreadStart(SaveDB));
}
private void client_ReceivedDatagram(object send,TcpAsynTrans.NetEventArgs e)
{
if(m_Flag)
{
double longitude,latitude;
string data = e.Client.Datagram;
int sp = data.IndexOf(",");
int sp2 = data.IndexOf(",",sp+1);
if(sp>0)
{
longitude = Convert.ToDouble(e.Client.Datagram.Substring(0,sp));
latitude = Convert.ToDouble(e.Client.Datagram.Substring(sp+1,sp2-sp-1));
DataRow dr = dt.NewRow();
dr["long"] = longitude;
dr["lati"] = latitude;
dt.Rows.Add(dr);
}
}
private void SaveDB()
{
while(true)
{
string strConn = "Provider=OraOLEDB.Oracle;Data Source=source;User Id=id;Password=adsf";
OleDbConnection conn = null;
OleDbDataAdapter adapter = null;
OleDbCommandBuilder commBuilder = null;
string strSql = "select * from table";
try
{
// 创建数据库连接
conn = new OleDbConnection(strConn);
// 创建DataAdapter和CommandBuilder
adapter = new OleDbDataAdapter(strSql, conn);
commBuilder = new OleDbCommandBuilder(adapter);
adapter.InsertCommand = commBuilder.GetInsertCommand();
adapter.DeleteCommand = commBuilder.GetDeleteCommand();
adapter.UpdateCommand = commBuilder.GetUpdateCommand();
conn.Open();
// 更新数据库
adapter.Update(ds);
// 更新完毕
ds.AcceptChanges();
conn.Close();
}
Thread.Sleep(600000);
}
}服务器每秒钟罚一次数据,接受后存入dataset,每10分钟一次存入oracle数据库。
大家帮忙看一下,错误出在哪了???
private DataTable dt;
private void Form1_Load(object sender, System.EventArgs e)
{
client.Connect("127.0.0.1",1008);
DataColumn dc = new DataColumn("long",typeof(double));
dt.Columns.Add(dc);
dc = new DataColumn("lati",typeof(double));
dt.Columns.Add(dc);
client.ReceivedDatagram+=new NetEvent(client_ReceivedDatagram);
Thread thread=new Thread(new ThreadStart(SaveDB));
}
private void client_ReceivedDatagram(object send,TcpAsynTrans.NetEventArgs e)
{
if(m_Flag)
{
double longitude,latitude;
string data = e.Client.Datagram;
int sp = data.IndexOf(",");
int sp2 = data.IndexOf(",",sp+1);
if(sp>0)
{
longitude = Convert.ToDouble(e.Client.Datagram.Substring(0,sp));
latitude = Convert.ToDouble(e.Client.Datagram.Substring(sp+1,sp2-sp-1));
DataRow dr = dt.NewRow();
dr["long"] = longitude;
dr["lati"] = latitude;
dt.Rows.Add(dr);
}
}
private void SaveDB()
{
while(true)
{
string strConn = "Provider=OraOLEDB.Oracle;Data Source=source;User Id=id;Password=adsf";
OleDbConnection conn = null;
OleDbDataAdapter adapter = null;
OleDbCommandBuilder commBuilder = null;
string strSql = "select * from table";
try
{
// 创建数据库连接
conn = new OleDbConnection(strConn);
// 创建DataAdapter和CommandBuilder
adapter = new OleDbDataAdapter(strSql, conn);
commBuilder = new OleDbCommandBuilder(adapter);
adapter.InsertCommand = commBuilder.GetInsertCommand();
adapter.DeleteCommand = commBuilder.GetDeleteCommand();
adapter.UpdateCommand = commBuilder.GetUpdateCommand();
conn.Open();
// 更新数据库
adapter.Update(ds);
// 更新完毕
ds.AcceptChanges();
conn.Close();
}
Thread.Sleep(600000);
}
}服务器每秒钟罚一次数据,接受后存入dataset,每10分钟一次存入oracle数据库。
大家帮忙看一下,错误出在哪了???
adapter.Update(ds.GetChanges());
帮忙写下代码, 是哪里出问题了?
为什么更新不了数据库,是哪里有错误?
这种情况应该如何 用dataset更新数据库???
http://blog.csdn.net/zhzuo/archive/2004/08/06/67037.aspx
DataTable中列名和数据库中表的列名也是完全对应。插入数据库的语句如下:
string strConn = "……";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter da = new OleDbDataAdapter("select * from ORACLE_XYTZ1",conn);
conn.open();
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
a.InsertCommand = cb.GetInsertCommand();
da.Update(ds,"ORACLE_XYTZ1");
ds.GetChanges();
conn.close();但还是报错:
“对于不返回任何基表信息的SelectCommand不支持动态SQL生成”可是数据库表里已经设置主键了。问题在哪里?
请指点
a.InsertCommand = cb.GetInsertCommand();
da.Update(ds,"ORACLE_XYTZ1");
ds.GetChanges();
conn.close();
这几句应这样写:
a.InsertCommand = cb.GetInsertCommand();
da.Update(ds.GetChanges(),"ORACLE_XYTZ1");
conn.close();你跟一下看看ds.GetChanges()的返回值里ORACLE_XYTZ1表里有没有记录。
da.Update(ds.GetChanges(),"ORACLE_XYTZ1");
conn.close();我改成这样了,可还是同样报错“对于不返回任何基表信息的SelectCommand不支持动态SQL生成”,在调试的时候就报错。
panjf(Troj)大哥在帮忙指导一下吧,我给你发了个短信
commBuilder = new OleDbCommandBuilder(adapter);
adapter.InsertCommand = commBuilder.GetInsertCommand();
adapter.DeleteCommand = commBuilder.GetDeleteCommand();
adapter.UpdateCommand = commBuilder.GetUpdateCommand();这个写法没什么错误。
你可以把adapter做成全局的试试?
你的ORACLE_XYTZ1真是个表吗?还是视图?
也有可能你连接数据库的用户名根本没有修改ORACLE_XYTZ1的权限。
创建的语句:
DROP TABLE ORACLE_XYTZ1;
CREATE TABLE FFXYTJ.ORACLE_XYTZ1
(LONGITUDE NUMBER(15, 13) NOT NULL,
LATITUDE NUMBER(15, 12),
CONSTRAINT ORACLE_XYTZ1P_1_1 PRIMARY KEY(LONGITUDE) 还是找不出问题出在哪里???
“对于不返回任何基表信息的SelectCommand不支持动态SQL生成”多谢eterblue(云流)指点