当前位置:编程学习 > C#/ASP.NET >>

c#中,判断一个表是否存在.在线等,谢谢

在c#中.我想用sql判断一个表是否存在,我是这样写的:
lstrSql = "if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[T_SYUSERTOKEN]') and OBJECTPROPERTY(id,N'IsUserTable')=1)";
问题是下面该怎么执行它,并且通过什么判断是否存在呢?或者在c#中,还有什么其他方法判断表是否存在呢?小弟刚入行,很多地方不懂,请各位朋友多介绍点方法给我,谢谢. --------------------编程问答-------------------- 用一个存储过程返回一个值:如0和1,
sqlstr="exec ......";
 public string  GetString(string sqlstr)
        {
            try
            {
                cnn.Open();
                SqlCommand sqlCmd = new SqlCommand(sqlstr, cnn);
                object str=sqlCmd.ExecuteScalar();
                return Convert.ToString(str);
            }
            catch (Exception ex)
            {
                throw new Exception("数据更新出错!", ex);
            }
            finally
            {
                cnn.Close();
            }
        }

如果这个过程得到的是1,则有,0则没有 --------------------编程问答-------------------- if exists (select * from 表名 where id = object_id(N'[dbo].[FK__Modules__ModuleDefinitions]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Modules] DROP CONSTRAINT FK_Modules_ModuleDefinitions --------------------编程问答-------------------- 有则修改,没有就创建。设个返回值,标识一下就行了,如1,-1。 --------------------编程问答-------------------- 差2秒没坐上沙发,呵呵 --------------------编程问答-------------------- sql = select * from dbo.sysobjects where id = object_id(N'[dbo].[T_SYUSERTOKEN]') and OBJECTPROPERTY(id,N'IsUserTable')=1
然后判断返回的记录数不就行了 --------------------编程问答-------------------- lstrSql = @"
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[T_SYUSERTOKEN]') and OBJECTPROPERTY(id,N'IsUserTable')=1)
  RETURN CAST(1 AS BIT)
ELSE
  RETURN CAST (0 AS BIT);
";
表存在就得到true值, 否则false值 --------------------编程问答-------------------- lstrSql = @"
if exists(select * from dbo.sysobjects where id = object_id(N'[dbo].[T_SYUSERTOKEN]') and OBJECTPROPERTY(id,N'IsUserTable')=1)
  SELECT CAST(1 AS BIT)
ELSE
  SELECT CAST (0 AS BIT);
";
不好意思, 手误 --------------------编程问答-------------------- 对,跟楼上的差不多,很简单的,就是跟根据返回值来判断表是否存在.
SqlCommand sqlCmd = new SqlCommand(sqlstr, cnn);
                int str=sqlCmd.ExecuteNonQuery();
                return str; --------------------编程问答-------------------- 如果就执行这一句话,可以执行完后

if(dr.Read())
{
  //有
}
//无 --------------------编程问答-------------------- 这个不是说C#里有什么办法,这个就只能是sql的方法

其实只要在企业管理器里为一个表“生成SQL脚本”,脚本出来以后第一句就是存在不存在 --------------------编程问答-------------------- 这么多人回答,小弟感谢不尽,小弟刚学,你们每个人的回答都能让我学到好多,我打算逐个试下.谢谢你们. --------------------编程问答-------------------- public static  void CheckTable(SqlConnection conn, string tableName)
        {
            DataTable dt = conn.GetSchema("Tables");
            DisplayData(dt);
            // 查找条件可以根据具体情况而定,
            DataRow[] drs = dt.Select(string.Format("TABLE_NAME='{0}'", tableName));
            if (drs.Length > 0)
                Console.WriteLine("有");
            else
                Console.WriteLine("没有");
        }
//测试:可以结合下面的函数看看到底有哪些表,以及各表的属性,以便设置上面的查找条件
        private static void DisplayData(System.Data.DataTable table)
        {
            foreach (System.Data.DataRow row in table.Rows)
            {
                foreach (System.Data.DataColumn col in table.Columns)
                {
                    Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
                }
                Console.WriteLine("============================");
            }
        } --------------------编程问答-------------------- 判断表是否存在这个功能,还是用SQL实现比较好,尽量不要用程序实现,效率太低。 --------------------编程问答-------------------- create proc panudan
as
declare out @ok_ int

if   exists(select   *   from   dbo.sysobjects   where   id   =   object_id(N '[dbo].[T_SYUSERTOKEN] ')   and   OBJECTPROPERTY(id,N 'IsUserTable ')=1) 
@ok_=1   
ELSE 
   @ok_=0

调用这个存储过程
接收返回值  1为存在0为不存在
--------------------编程问答-------------------- 手工写的可能有错 --------------------编程问答-------------------- msdn上面的例子 
public   DataTable   GetTables(OleDbConnection   conn) 

    conn.Open(); 
    DataTable   schemaTable   =   conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
                                                                                                      new   object[]   {null,   null,   null,   "TABLE "}); 
    conn.Close(); 
    return   schemaTable; 



获取Access中所有表和所有表字段属性的完美解决办法!不需要引用ADOX   

//schemaTable将取到所有用户表的信息,schemaTable取到指定表名的表的所有信息 
OleDbConnection   conn   =   new   OleDbConnection(strConn); 
      conn.Open(); 
      DataTable   schemaTable     =   conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,   new   Object[]{null,   null,   null,   "table "}); 
DataTable   schemaTable2     =   conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,   new   Object[]{null,   null,   /*tablename*/,   null}); 
conn.Close(); 
=========================================== 
不知道是否对你有用,呵呵 --------------------编程问答-------------------- 或者用sql语句

select * from sysobjects where name='tableName' and tpye='U' 

然后C#里操作这条SQL,这个会吧 
ROWCOUNT=0就不存在嘛 --------------------编程问答-------------------- 用SQL语句来判断,然后在C#里调用SQL。应该很容易实现
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,