Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查表是否存在:表存在时不存在_C#_Sql_Sql Server_Visual Studio 2012 - Fatal编程技术网

C# 检查表是否存在:表存在时不存在

C# 检查表是否存在:表存在时不存在,c#,sql,sql-server,visual-studio-2012,C#,Sql,Sql Server,Visual Studio 2012,使用VS2012,我在App_数据中手动创建了名为Tasoo1.mdf的mdf文件,连接名为con。Tasoo.mdf已使用创建了1个名为“1010”的表 public bool CheckTblExist(string TblName) { try { string cmTxt = "select case when exists" + "((select * from information_sch

使用VS2012,我在App_数据中手动创建了名为Tasoo1.mdf的mdf文件,连接名为con。Tasoo.mdf已使用创建了1个名为“1010”的表

public bool CheckTblExist(string TblName)
    {
        try
        {  
            string cmTxt = "select case when exists" 
            + "((select * from information_schema.tables " 
            + "where table_name = '" + TblName + "')) then 1 else 0 end";

            var cmd = new OdbcCommand(cmTxt);
            if ((int)cmd.ExecuteScalar() == 1) exists = true;
            MessageBox.Show(TblName + " table Exists.");
        }
        catch
        {
            exists = false;
            MessageBox.Show(TblName + " table does not Exist.");
        }
        return exists;
    }

删除代码,给我-表不存在?你知道如何解决这个问题吗?。提前多谢。

你的if语句下只有一条语句,即exists=true。您的MessageBox.Show在if语句之外。因此,即使if语句返回false,您也将始终得到表存在的消息。用{}把它括起来

您当前的代码:

if ((int)cmd.ExecuteScalar() == 1) 
{    
     exists = true;
     MessageBox.Show(TblName + " table Exists.");
}
删除代码,给我-表不存在

你在接球区表现出了这一点。这意味着你得到了一些例外。设置一个空的捕捉块不是一个好主意。捕获异常并查看出了什么问题

if ((int)cmd.ExecuteScalar() == 1) exists = true;
MessageBox.Show(TblName + " table Exists."); // this is irrespective of the if 

if语句下只有一条语句,即exists=true。您的MessageBox.Show在if语句之外。因此,即使if语句返回false,您也将始终得到表存在的消息。用{}把它括起来

您当前的代码:

if ((int)cmd.ExecuteScalar() == 1) 
{    
     exists = true;
     MessageBox.Show(TblName + " table Exists.");
}
删除代码,给我-表不存在

你在接球区表现出了这一点。这意味着你得到了一些例外。设置一个空的捕捉块不是一个好主意。捕获异常并查看出了什么问题

if ((int)cmd.ExecuteScalar() == 1) exists = true;
MessageBox.Show(TblName + " table Exists."); // this is irrespective of the if 
简单的尝试方法

catch(SqlException ex)
{
   MessageBox.Show(ex.Message);
   //handle exception
}
同时选中此项:

简单的尝试方法

catch(SqlException ex)
{
   MessageBox.Show(ex.Message);
   //handle exception
}

同时选中此项:

当您说它提供的表不存在时,我想您的意思是显示第二个消息框?这是由引发的异常引起的。您确实需要捕获抛出的异常对象,它会告诉您问题所在。

当您说它给出的表不存在时,我想您的意思是显示第二个消息框?这是由引发的异常引起的。您确实需要捕获抛出的异常对象,它将告诉您问题所在

bool tabex;
try
{ 
    var cmd = new OdbcCommand(
      "select case when exists((select * from information_schema.tables where table_name = '" + tableName + "')) then 1 else 0 end");

    tabex= (int)cmd.ExecuteScalar() == 1;
}
catch
{
    try
    {
        tabex = true;
        var cmdOthers = new OdbcCommand("select 1 from " + tableName + " where 1 = 0");
        cmdOthers.ExecuteNonQuery();
    }
    catch
    {
        tabex = false;
    }
}
此命令从未与任何类型的连接对象关联,更不用说与打开的对象关联了

var cmd = new OdbcCommand(cmTxt);
此代码忽略发生的任何异常,只报告该表不存在。如果您实际指定了一个包含异常的变量,并对其进行了检查,您可能已经发现了我提到的首要问题

当然,即使修复了这些问题,当表不存在时,您编写的代码也不应该抛出异常。当您调用ExecuteScalar时,它只会有一个不同的结果值

有这么多问题,这感觉像是一个家庭作业问题

您可以将后面的部分重新编写为:

catch
    {
        exists = false;
        MessageBox.Show(TblName + " table does not Exist.");
    }
此命令从未与任何类型的连接对象关联,更不用说与打开的对象关联了

var cmd = new OdbcCommand(cmTxt);
此代码忽略发生的任何异常,只报告该表不存在。如果您实际指定了一个包含异常的变量,并对其进行了检查,您可能已经发现了我提到的首要问题

当然,即使修复了这些问题,当表不存在时,您编写的代码也不应该抛出异常。当您调用ExecuteScalar时,它只会有一个不同的结果值

有这么多问题,这感觉像是一个家庭作业问题

您可以将后面的部分重新编写为:

catch
    {
        exists = false;
        MessageBox.Show(TblName + " table does not Exist.");
    }

除了下面的答案之外,我个人会使用信息表中的select count*,其中。。。完全放弃这个案子。我不确定上面的查询到底是做什么的,但你不应该因为表不存在就需要catch处理程序。实际上所有答案都是正确的,我最需要的是阅读异常,是的,这很容易…真的非常感谢你们所有的人,特别是谁详细的解决方案。除了下面的答案,我个人会使用选择计数*从信息_schema.tables,其中。。。完全放弃这个案子。我不确定上面的查询到底是做什么的,但你不应该因为表不存在就需要一个catch处理程序。事实上所有的答案都是正确的,我最需要的是阅读异常,是的,这很容易…真的非常感谢所有特别详细说明解决方案的人。谢谢Habib,我真的很感谢你的支持,但这并没有解决问题。仍然给我-表不存在。@AdnanAl Husain,那是因为您得到了一个异常。捕获异常并查看出了什么问题。您的sql语句可能不是correct@Habib-就我个人而言,我打赌异常与命令从未与连接相关联的事实有关。@Damien_the_unsiever,哇,接得好。那应该是个答案。达米恩你说的是对的,你赢了。又犯了愚蠢的错误。非常感谢我的兄弟哈比卜和达米恩。Habib如果你是沙特人,也许你会对这个项目感兴趣并帮助我!。谢谢哈比布,我真的很感谢你的支持,但这并没有解决问题。“还是给我-桌子不存在。”阿德纳勒·侯赛因,那是因为你得到了一张桌子
n例外。捕获异常并查看出了什么问题。您的sql语句可能不是correct@Habib-就我个人而言,我打赌异常与命令从未与连接相关联的事实有关。@Damien_the_unsiever,哇,接得好。那应该是个答案。达米恩你说的是对的,你赢了。又犯了愚蠢的错误。非常感谢我的兄弟哈比卜和达米恩。Habib如果你是沙特人,也许你会对这个项目感兴趣并帮助我!。