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

嵌套 if 语句返回语句句柄未执行错误

Sveltekit 新创建的 cookie 未显示在钩子的句柄函数中

在 SqlDataAdapter.Update() 中获取错误消息

使用“SQlDataAdapter”时的最佳实践