DataSet 往数据库插入 问题描述:从服务器A中的A表抽出数据放入DataSet中,之后想把DataSet中的内容原封不到的放入服务器B中的A表里,请问如何实现,希望提供原代码 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不放入 DetaSet 中 不可以吗 本来是打算用linkserver但是服务器A有可能很多,如果每个服务器A都创建一个linkserver就比较麻烦,当然不知道你们说的 不放入 DetaSet 那是用什么方法来实现 将数据库一条一条从DATASET中取出.再用INSERT插入数据库 将数据从DATASET中一条一条取出.后用INSETR插入数据库 我现在就是用的上面的方法,但是感觉数据量大的时候会影响速度。我想知道有没有办法一次性把dataset里面的数据导入到数据库中。 for ( int i = 0; i< iLockNum; i++ ) { oraRow0 = oraTable0->Rows[i]; OBJECT_NAME = oraRow0->ItemArray[0]->ToString(); SESSION_ID = oraRow0->ItemArray[1]->ToString(); ORACLE_USERNAME = oraRow0->ItemArray[2]->ToString(); PROCESS = oraRow0->ItemArray[3]->ToString(); LOCKED_MODE = oraRow0->ItemArray[4]->ToString(); MACHINE = oraRow0->ItemArray[5]->ToString(); STATUS = oraRow0->ItemArray[6]->ToString(); SID_ = oraRow0->ItemArray[7]->ToString(); SERIAL_ = oraRow0->ItemArray[8]->ToString(); PROGRAM_ = oraRow0->ItemArray[9]->ToString(); MACHINE = MACHINE->Replace( Convert::ToString((System::Char)0), "" ); insertComm = String::Format("insert into \"DATABASELOCK_NEW\"(\"OBJECT_NAME\", \"SESSION_ID\", \"ORACLE_USERNAME\", \"PROCESS\", \"LOCKED_MODE\", \"MACHINE\", \"STATUS\", \"SID_\", \"SERIAL_\", \"PROGRAM_\", \"GETTTIME\")VALUES( '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')",OBJECT_NAME,SESSION_ID,ORACLE_USERNAME,PROCESS,LOCKED_MODE,MACHINE,STATUS,SID_,SERIAL_,PROGRAM_,CurrentTime); OleDbCommand^ command = gcnew OleDbCommand(insertComm, Conn1); command->ExecuteNonQuery(); delete (IDisposable^)command; } // 循环插入数据库锁记录_结束 这是我上次做的代码....问了很多朋友...答案都是跟这个差不多的...因为数据最终都是用INSERT语句来插入..如果你有更好的方法..也请告诉我.谢谢 [email protected] 谢谢楼上的,循环插入这个我会,我现在就是用的这样的方法,我现在想 知道能不能一次性的把dataset里面的数据导入到数据库中。 OleDbDataAdapter oDataAdapter = new OleDbDataAdapter(mCommand); OleDbCommandBuilder builder = new OleDbCommandBuilder(oDataAdapter); DataSet dsOld = new DataSet(); DataSet dsNew = new DataSet(); ; foreach (DataTable dt in dsOld.Tables) { dsNew = new DataSet(); dsNew.Tables.Add(dt.Copy()); oDataAdapter.Update(ds, dt.TableName); }这样会不会简单点 我是循环 DataTable 有几个表 就循环 几次 然后插入 将表的行全部设置成ADD状态,然后提交。 一次性的把dataset里面的数据导入到数据库中关注 11 楼的mCommand 是指什么?能不能说的详细一点?? class Program { static void Main(string[] args) { string strConnFrom = @"Data Source=.\SQLEXPRESS;Initial Catalog=LoadTest;Integrated Security=SSPI;"; string strConnTo = @"Data Source=.\SQLEXPRESS;Initial Catalog=LoadTestCopy;Integrated Security=SSPI;"; DataSet dataSet = new DataSet(); DataSet dataSetTo = new DataSet(); int intEffected = 0; using (SqlConnection connFrom = new SqlConnection(strConnFrom)) { SqlCommand cmdFrom = new SqlCommand("SELECT * FROM dbo.LoadTestBrowsers", connFrom); SqlDataAdapter adapterFrom = new SqlDataAdapter(cmdFrom); adapterFrom.Fill(dataSet); } //Change row state dataSet.WriteXml("temp.xml"); dataSetTo.ReadXml("temp.xml"); using (SqlConnection connTo = new SqlConnection(strConnTo)) { SqlCommand cmdTo = new SqlCommand("SELECT * FROM dbo.LoadTestBrowsers", connTo); SqlDataAdapter adapterTo = new SqlDataAdapter(cmdTo); SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapterTo); adapterTo.RowUpdated += new SqlRowUpdatedEventHandler(adapterTo_RowUpdated); intEffected = adapterTo.Update(dataSetTo); } Console.WriteLine(intEffected); Console.ReadKey(); } static void adapterTo_RowUpdated(object sender, SqlRowUpdatedEventArgs e) { if ( e.Errors != null && e.StatementType == StatementType.Insert) { e.Status = UpdateStatus.SkipCurrentRow; //Replace this part code to update this row maually } } } ConnectionManager mConnectionManagermCommand = new OleDbCommand();mConnectionManager.Connect();mCommand = (OleDbCommand)mConnectionManager.Connection.CreateCommand(); 给个参考,没有实现。建立两个ds,ds1连接到服务器A的A表,ds2连接到服务器B的A表,当ds1读取数据后,拷贝到ds2然后ds2执行更新。 判断文件是否被加密 急!谁会用SharpZipLib下的Encryption? 急~在线等~关于水晶报表的横向打印问题 有一道泛类型的问题,需要调用dll文件,是c#控制台程序,请高手帮帮我 类似这样的XML怎么解开才是最好的方案? 关于XML的问题...... 求解关于超市库存方面的一个问题 菜鸟请教.C#中怎样得到 .ini 里面的数据??? 如何在我的电脑中用程序添加一个硬盘符号,并具有自由指定的弹出菜单 如何设置activex控件窗口属性 winform 设置大字体,为什么控件也会变大!如何避免? 如何在窗体之间传值?在线等.......
{
oraRow0 = oraTable0->Rows[i];
OBJECT_NAME = oraRow0->ItemArray[0]->ToString();
SESSION_ID = oraRow0->ItemArray[1]->ToString();
ORACLE_USERNAME = oraRow0->ItemArray[2]->ToString();
PROCESS = oraRow0->ItemArray[3]->ToString();
LOCKED_MODE = oraRow0->ItemArray[4]->ToString(); MACHINE = oraRow0->ItemArray[5]->ToString();
STATUS = oraRow0->ItemArray[6]->ToString();
SID_ = oraRow0->ItemArray[7]->ToString();
SERIAL_ = oraRow0->ItemArray[8]->ToString();
PROGRAM_ = oraRow0->ItemArray[9]->ToString(); MACHINE = MACHINE->Replace( Convert::ToString((System::Char)0), "" );
insertComm = String::Format("insert into \"DATABASELOCK_NEW\"(\"OBJECT_NAME\", \"SESSION_ID\", \"ORACLE_USERNAME\", \"PROCESS\", \"LOCKED_MODE\", \"MACHINE\", \"STATUS\", \"SID_\", \"SERIAL_\", \"PROGRAM_\", \"GETTTIME\")VALUES( '{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')",OBJECT_NAME,SESSION_ID,ORACLE_USERNAME,PROCESS,LOCKED_MODE,MACHINE,STATUS,SID_,SERIAL_,PROGRAM_,CurrentTime); OleDbCommand^ command = gcnew OleDbCommand(insertComm, Conn1);
command->ExecuteNonQuery();
delete (IDisposable^)command; } // 循环插入数据库锁记录_结束
OleDbCommandBuilder builder = new OleDbCommandBuilder(oDataAdapter); DataSet dsOld = new DataSet();
DataSet dsNew = new DataSet(); ;
foreach (DataTable dt in dsOld.Tables)
{
dsNew = new DataSet();
dsNew.Tables.Add(dt.Copy());
oDataAdapter.Update(ds, dt.TableName);
}这样会不会简单点
有几个表 就循环 几次 然后插入
{
static void Main(string[] args)
{
string strConnFrom = @"Data Source=.\SQLEXPRESS;Initial Catalog=LoadTest;Integrated Security=SSPI;";
string strConnTo = @"Data Source=.\SQLEXPRESS;Initial Catalog=LoadTestCopy;Integrated Security=SSPI;";
DataSet dataSet = new DataSet();
DataSet dataSetTo = new DataSet();
int intEffected = 0; using (SqlConnection connFrom = new SqlConnection(strConnFrom))
{
SqlCommand cmdFrom = new SqlCommand("SELECT * FROM dbo.LoadTestBrowsers", connFrom);
SqlDataAdapter adapterFrom = new SqlDataAdapter(cmdFrom);
adapterFrom.Fill(dataSet);
} //Change row state
dataSet.WriteXml("temp.xml");
dataSetTo.ReadXml("temp.xml"); using (SqlConnection connTo = new SqlConnection(strConnTo))
{
SqlCommand cmdTo = new SqlCommand("SELECT * FROM dbo.LoadTestBrowsers", connTo);
SqlDataAdapter adapterTo = new SqlDataAdapter(cmdTo);
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapterTo);
adapterTo.RowUpdated += new SqlRowUpdatedEventHandler(adapterTo_RowUpdated);
intEffected = adapterTo.Update(dataSetTo);
} Console.WriteLine(intEffected); Console.ReadKey();
} static void adapterTo_RowUpdated(object sender, SqlRowUpdatedEventArgs e)
{
if ( e.Errors != null && e.StatementType == StatementType.Insert)
{
e.Status = UpdateStatus.SkipCurrentRow;
//Replace this part code to update this row maually
}
}
}
mCommand = new OleDbCommand();
mConnectionManager.Connect();
mCommand = (OleDbCommand)mConnectionManager.Connection.CreateCommand();
ds1连接到服务器A的A表,
ds2连接到服务器B的A表,
当ds1读取数据后,拷贝到ds2
然后ds2执行更新。