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;
}
使用VS2012,C#我在App_Data中手动创建名为Tasoo1.mdf的mdf文件,连接名为con。 Tasoo.mdf已经有一个名为'1010'的表使用
创建string cmdText = "CREATE TABLE [" + tblname + "]"
+ "(column_name1 int,column_name2 int,column_name3 int)";
代码淘汰,给我 - 表不存在?任何想法如何解决这个问题..提前很多。
答案 0 :(得分:2)
您的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区块中显示了这一点。这意味着你得到了一些例外。有一个空的挡块不是一个好主意。抓住异常,看看出了什么问题。
catch(SqlException ex)
{
MessageBox.Show(ex.Message);
//handle exception
}
答案 1 :(得分:2)
var cmd = new OdbcCommand(cmTxt);
此命令永远不会与任何类型的连接对象关联(更不用说是打开的连接对象)
catch
{
exists = false;
MessageBox.Show(TblName + " table does not Exist.");
}
此代码忽略发生的任何异常,并仅报告该表不存在。如果您确实指定了一个包含异常的变量并对其进行了检查,那么您可能已经发现了我提到的最重要的问题。
当你修复它们时,当然,当表不存在时,你的代码(如所写的)不应该抛出异常。当您致电ExecuteScalar
时,它会有不同的结果值。
有这么多问题,这就像是一个家庭作业问题。
您可以将后面的部分重写为:
if ((int)cmd.ExecuteScalar() == 1)
{
MessageBox.Show(TblName + " table exists.");
return true;
}
else
{
MessageBox.Show(TblName + " table does not exist.");
return false;
}
答案 2 :(得分:0)
轻松尝试
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;
}
}
答案 3 :(得分:0)
当你说它表格不存在时,我假设你的意思是第二个消息框正在显示?这是由抛出异常引起的。你真的需要捕获抛出的异常对象,它会告诉你你的问题是什么。