我现在通过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);
建议用Execute NonQuery,再写 new SqlCommand("update B..p_material .." 试试,不要用MasterAdapter.Update(MasterDt);
#2
用update B..p_material 。。。是可以的。
MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
#3
估计是在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编译器中执行一边,看看有没有语法错误。
-》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
#5
语法上没有问题的。
#6
必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。
#7
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);
建议用Execute NonQuery,再写 new SqlCommand("update B..p_material .." 试试,不要用MasterAdapter.Update(MasterDt);
#2
用update B..p_material 。。。是可以的。
MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
MasterAdapter.Fill(MasterDt)能读取出数据,为什么MasterAdapter.Update(MasterDt)不行。
#3
用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编译器中执行一边,看看有没有语法错误。
-》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
#5
B..p_material
-》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。
#6
B..p_material
-》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。
必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。
#7
B..p_material
-》 这中间是2个点号么???? 先把Sql语句在sql编译器中执行一边,看看有没有语法错误。
语法上没有问题的。
必须重建 B数据库的链接。不同的链接 创建不同的cmd对象,对不同的数据库进行操作。
你虽然创建了 A数据库的链接,但是 cmd执行的sql语句是不知道有B这个数据库的。
这个应该不是跟数据库的链接有关。
应该是SQLDataAdapter有关。