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#