问题描述
建立的Connecting的链接,数据是指向A。我现在通过A的数据库链接要向B数据库中写入数据(A和B是在同一台服务器上。)代码如下MasterCmd=newSqlCommand("select*fromB..p_materialwheretParentId=101",db.thisSqlconnection);MasterAdapter=newSqlDataAdapter();MasterAdapter.SelectCommand=MasterCmd;MasterDt=newDataTable();MasterAdapter.Fill(MasterDt);上面代码是打开B数据库中p_material,是可以读取数据的DR=MasterDt.NewRow();......MasterDt.Rows.Add(DR);MasterAdapter.Update(MasterDt);上面的代码在向B数据库中p_material插入数据时报错提示:捕捉到System.Data.SqlClient.SqlExceptionMessage=对象名'p_material'无效。Source=.NetSqlClientDataProviderErrorCode=-2146232060Class=16LineNumber=1Number=208Procedure=""Server=10.97.138.145State=1StackTrace:在System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgsrowUpdatedEvent,BatchCommandInfo[]batchCommands,Int32commandCount)在System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgsrowUpdatedEvent,BatchCommandInfo[]batchCommands,Int32commandCount)在System.Data.Common.DbDataAdapter.Update(DataRow[]dataRows,DataTableMappingtableMapping)在System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTabledataTable,DataTableMappingtableMapping)在System.Data.Common.DbDataAdapter.Update(DataTabledataTable)在HCSZ_EMC.Film_Frm_P_Material.AddNew()位置C:Users0100146DesktopHCSZ_EMCHCSZ_EMCHCSZ_EMCFilm_Frm_P_Material.cs:行号265在HCSZ_EMC.Film_Frm_P_Material.tbtSave_Click(Objectsender,EventArgse)位置C:Users0100146DesktopHCSZ_EMCHCSZ_EMCHCSZ_EMCFilm_Frm_P_Material.cs:行号298InnerException:求教大神们如何解决。(要是能新建B数据库的链接,就不存在此问题了。)
解决方案
解决方案二:
对象名'p_material'无效,估计是在A连接中执行了更新找不到这张表;建议用ExecuteNonQuery,再写newSqlCommand("updateB..p_material.."试试,不要用MasterAdapter.Update(MasterDt);
解决方案三:
用updateB..p_material。。。是可以的。MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
解决方案四:
引用2楼lishan200012的回复:
用updateB..p_material。。。是可以的。MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
估计是在A连接中执行了SQL语句,updatep_material。。。,但A数据库中没有表p_material,所以报错了,你可以用用SQLServerProfiler追踪这个结果看看。MasterAdapter.Update(MasterDt)这个原理那些就不看了,好久没用ado.net了
解决方案五:
B..p_material-》这中间是2个点号么????先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
解决方案六:
引用4楼duanzi_peng的回复:
B..p_material-》这中间是2个点号么????先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。
解决方案七:
引用5楼lishan200012的回复:
Quote: 引用4楼duanzi_peng的回复:
B..p_material-》这中间是2个点号么????先把Sql语句在sql编译器中执行一边,看看有没有语法错误。语法上没有问题的。
必须重建B数据库的链接。不同的链接创建不同的cmd对象,对不同的数据库进行操作。你虽然创建了A数据库的链接,但是cmd执行的sql语句是不知道有B这个数据库的。
解决方案八:
引用6楼duanzi_peng的回复:
Quote: 引用5楼lishan200012的回复:
Quote: 引用4楼duanzi_peng的回复:
B..p_material-》这中间是2个点号么????先把Sql语句在sql编译器中执行一边,看看有没有语法错误。语法上没有问题的。
必须重建B数据库的链接。不同的链接创建不同的cmd对象,对不同的数据库进行操作。你虽然创建了A数据库的链接,但是cmd执行的sql语句是不知道有B这个数据库的。
这个应该不是跟数据库的链接有关。应该是SQLDataAdapter有关。