C# 检查表是否存在:表存在时不存在
使用VS2012,我在App_数据中手动创建了名为Tasoo1.mdf的mdf文件,连接名为con。Tasoo.mdf已使用创建了1个名为“1010”的表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
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如果你是沙特人,也许你会对这个项目感兴趣并帮助我!。