【问题标题】:SqlDataAdapter handle error - object is not createdSqlDataAdapter 句柄错误 - 未创建对象
【发布时间】: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;

        }

【问题讨论】:

  • 你应该先检查表是否存在:stackoverflow.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 中选择您真正想要的数据?这样你可以比较行,如果表不存在,你不会得到错误,而只是一个空的数据表。

标签: c# sql-server-2017 sqldataadapter


【解决方案1】:

一种方法是首先检查数据表是否存在。

按照此处给出的示例进行操作: Check if table exists in SQL Server

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多