捕捉到 System.Data.SqlClient.SqlException Message=对象名 '' 无效

时间:2021-11-10 11:24:33
建立的Connecting的链接,数据是指向A。
我现在通过A的数据库链接要向B数据库中写入数据(A和B是在同一台服务器上。)
代码如下

MasterCmd = new SqlCommand("select * from B..p_material where tParentId=101", db.thisSqlconnection);
MasterAdapter = new SqlDataAdapter();
MasterAdapter.SelectCommand = MasterCmd;
MasterDt = new DataTable();
MasterAdapter.Fill(MasterDt);
上面代码是打开B数据库中p_material,是可以读取数据的

DR = MasterDt.NewRow();
......
MasterDt.Rows.Add(DR);
MasterAdapter.Update(MasterDt);
上面的代码在向B数据库中p_material插入数据时报错提示:


捕捉到 System.Data.SqlClient.SqlException Message=对象名 'p_material' 无效。
  Source=.Net SqlClient Data Provider
  ErrorCode=-2146232060   Class=16  LineNumber=1 Number=208
  Procedure=""
  Server=10.97.138.145
  State=1
  StackTrace:
       在 System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
       在 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
       在 System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
       在 System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
       在 System.Data.Common.DbDataAdapter.Update(DataTable dataTable)
       在 HCSZ_EMC.Film_Frm_P_Material.AddNew() 位置 C:\Users\00100146\Desktop\HCSZ_EMC\HCSZ_EMC\HCSZ_EMC\Film_Frm_P_Material.cs:行号 265
       在 HCSZ_EMC.Film_Frm_P_Material.tbtSave_Click(Object sender, EventArgs e) 位置 C:\Users\00100146\Desktop\HCSZ_EMC\HCSZ_EMC\HCSZ_EMC\Film_Frm_P_Material.cs:行号 298
  InnerException: 

求教大神们如何解决。
(要是能新建B数据库的链接,就不存在此问题了。)

7 个解决方案

#1


对象名 'p_material' 无效,估计是在A连接中执行了更新找不到这张表;
建议用Execute NonQuery,再写 new SqlCommand("update B..p_material .." 试试,不要用MasterAdapter.Update(MasterDt);

#2


用update B..p_material 。。。是可以的。

MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。

#3


引用 2 楼 lishan200012 的回复:
用update B..p_material 。。。是可以的。

MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。


估计是在A连接中执行了SQL语句,update p_material 。。。,但A数据库中没有表p_material,所以报错了,你可以用用 SQL Server Profiler 追踪这个结果看看。MasterAdapter.Update(MasterDt)这个原理那些就不看了,好久没用ado.net了

http://www.cnblogs.com/snowdream/archive/2009/02/10/use-sql-server-profiler-trace-exception.html

#4


B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。

#5


引用 4 楼 duanzi_peng 的回复:
B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

#6


引用 5 楼 lishan200012 的回复:
Quote: 引用 4 楼 duanzi_peng 的回复:

B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。

#7


引用 6 楼 duanzi_peng 的回复:
Quote: 引用 5 楼 lishan200012 的回复:

Quote: 引用 4 楼 duanzi_peng 的回复:

B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。

这个应该不是跟数据库的链接有关。
应该是SQLDataAdapter有关。

#1


对象名 'p_material' 无效,估计是在A连接中执行了更新找不到这张表;
建议用Execute NonQuery,再写 new SqlCommand("update B..p_material .." 试试,不要用MasterAdapter.Update(MasterDt);

#2


用update B..p_material 。。。是可以的。

MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。

#3


引用 2 楼 lishan200012 的回复:
用update B..p_material 。。。是可以的。

MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。


估计是在A连接中执行了SQL语句,update p_material 。。。,但A数据库中没有表p_material,所以报错了,你可以用用 SQL Server Profiler 追踪这个结果看看。MasterAdapter.Update(MasterDt)这个原理那些就不看了,好久没用ado.net了

http://www.cnblogs.com/snowdream/archive/2009/02/10/use-sql-server-profiler-trace-exception.html

#4


B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。

#5


引用 4 楼 duanzi_peng 的回复:
B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

#6


引用 5 楼 lishan200012 的回复:
Quote: 引用 4 楼 duanzi_peng 的回复:

B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。

#7


引用 6 楼 duanzi_peng 的回复:
Quote: 引用 5 楼 lishan200012 的回复:

Quote: 引用 4 楼 duanzi_peng 的回复:

B..p_material 


-》  这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。


语法上没有问题的。

必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。

这个应该不是跟数据库的链接有关。
应该是SQLDataAdapter有关。