SqlDataAdapter 句柄错误 - 未创建对象
Posted
技术标签:
【中文标题】SqlDataAdapter 句柄错误 - 未创建对象【英文标题】:SqlDataAdapter handle error - object is not created 【发布时间】:2018-10-11 07:39:10 【问题描述】:我有这个错误:
Invalid object name 'sap.AfdelingsrapportACTUAL'.
这是因为这个表还没有创建。
我需要在我的SqlDataAdapter
中进行检查 - 所以如果为空或没有得到任何东西,它会继续前进。但我真的不知道该怎么做。
我认为它应该在我的 SqlDataAdapter 周围,但我可能错了
代码
DataTable sqldt = new DataTable();
string sqlQuery = @"Select * from " + table;
SqlConnection sqlcon = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sqlQuery, sqlcon);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
da.Fill(sqldt);
我认为它应该是什么样子:
public static bool CompareDataTables(DataTable dt, string table, string connectionString)
DataTable sqldt = new DataTable();
string sqlQuery = @"Select * from " + table;
SqlConnection sqlcon = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(sqlQuery, sqlcon);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
if (da == "doesnt have any table")
return true;
else
da.Fill(sqldt);
int sqlCols = sqldt.Columns.Count;
int excelCols = dt.Columns.Count;
if (excelCols == sqlCols)
return false;
else return true;
【问题讨论】:
你应该先检查表是否存在:***.com/questions/167576/… 如果只是要比较表中的列数,为什么要选择所有行(SELECT *
无条件)?
@John 是的,我可以做到。我只是希望我可以用一个聪明的 C# 特性来解决它
@Thomas 您可以使用SELECT TOP 0 *
,例如,不会返回任何数据。或者,如果您只是要比较表架构,则可以使用 SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'yourtablename'
选择此信息(如果您使用的是 sqlserver - 您的问题并不清楚)
@Thomas 不确定。我猜你可以捕捉到命令失败时发生的 SqlException 。但这感觉相当hacky。为什么不从 information_schema 中选择您真正想要的数据?这样你可以比较行,如果表不存在,你不会得到错误,而只是一个空的数据表。
【参考方案1】:
一种方法是首先检查数据表是否存在。
按照此处给出的示例进行操作: Check if table exists in SQL Server
【讨论】:
以上是关于SqlDataAdapter 句柄错误 - 未创建对象的主要内容,如果未能解决你的问题,请参考以下文章
DataGridView 和 SqlDataAdapter 未正确更新
成功插入期间 SqlDataAdapter 未触发 RowUpdated 或 RowUpdating
Sveltekit 新创建的 cookie 未显示在钩子的句柄函数中