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

lishan200012 2015-06-26 03:52:21
建立的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数据库的链接,就不存在此问题了。)
...全文
638 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishan200012 2015-06-27
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
[quote=引用 5 楼 lishan200012 的回复:] [quote=引用 4 楼 duanzi_peng 的回复:] B..p_material -》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。[/quote] 必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。 你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。[/quote] 这个应该不是跟数据库的链接有关。 应该是SQLDataAdapter有关。
  • 打赏
  • 举报
回复
引用 5 楼 lishan200012 的回复:
[quote=引用 4 楼 duanzi_peng 的回复:] B..p_material -》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。[/quote] 必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。 你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。
lishan200012 2015-06-26
  • 打赏
  • 举报
回复
引用 4 楼 duanzi_peng 的回复:
B..p_material -》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。
  • 打赏
  • 举报
回复
B..p_material -》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
jijkc 2015-06-26
  • 打赏
  • 举报
回复
引用 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
lishan200012 2015-06-26
  • 打赏
  • 举报
回复
用update B..p_material 。。。是可以的。 MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
jijkc 2015-06-26
  • 打赏
  • 举报
回复
对象名 'p_material' 无效,估计是在A连接中执行了更新找不到这张表; 建议用Execute NonQuery,再写 new SqlCommand("update B..p_material .." 试试,不要用MasterAdapter.Update(MasterDt);

111,097

社区成员

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

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

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