Skip to main content

sp_tables的@table_type参数

打算写个工具,直接从数据库按字段生成类,使用到了sp_tables,遇到了很奇怪的问题。

查MSDN可以知道:sp_tables的参数之一:@table_type varchar(100) 可选项有:TABLESYSTEMTABLEVIEW

我写了如下代码:Databasedb = DatabaseFactory.CreateDatabase();
DbCommand com = new SqlCommand();
com.CommandText = "sp_tables";
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@table_type", "TABLE");
IDataReader reader = db.ExecuteReader(com);
却拿不到任何东西。不加@talbe_type的话又返回了大量的系统VIEW。

查看sp_tables的源码,在关于@talbe_type的部分发现如下的东西:if (charindex('''TABLE''',@table_type) <> 0)倒回去仔细看MSDN,参数的说明部分:[ , [ @table_type = ] "'type'" ]比一般的多了2个",而且下面也有说明

Single quotation marks must enclose each table type, and double quotation marks must enclose the whole parameter. Table types must be uppercase. If SET QUOTED_IDENTIFIER is ON, each single quotation mark must be doubled and the whole parameter must be enclosed in single quotation marks.
太大意了。

修改代码:com.Parameters.AddWithValue("@table_type", "'TABLE'");

环境:C# 2.0,MS企业库,SQL Server 2005.

Comments

Popular posts from this blog

asp.net Single Sign-On(SSO) from SAP

公司的主系统是SAP的东西,有的时候老板想要一些小的新功能或是某个部门需要一个自己使用的小系统又不想买SAP的东西(贵啊),只有自己写和使用一些第三方免费或是开源的系统,这个时候就难免涉及到 Single Sign-On 。而在asp.net 2.0下是非常容易实现的。有SAP提供的“Sapsecu.dll”,“sapssoext.dll”2个dll再加上由公司SAP系统提供的"verify.pse"就足够了。 第一步 复制Sapsecu.dll到system32目录,并使用Rersrv32注册。 第二步 在项目里添加对sapssoext.dll的引用,vs2005会自动生成Interop.SAPSSOEXT.dll来让.net使用。 第三步 在你项目的根目录创建sap目录,并将SAP系统那边提供的verify.pse复制过去。位置倒到不是一定要在这里,只要你找得到就好。 第四步 在SAP系统那边,需要生成一个类似:http://yourserver/login.aspx?sso=werwerwerwe的链接,当然具体的页面需要你和那边的管理员商量来决定。这个链接是有时效性的,我在做测试的时候他们给的测试链接通常只能用一天。现在我们要做到就是我们这边的编码,在login.aspx的page_load里面实现: protected void Page_Load(object sender, EventArgs e) {   string sso= Request.QueryString["sso"];   SAPSSOEXT.SSO2Ticket objSSO = new SAPSSOEXT.SSO2Ticket();   objSSO.CryptLib = "sapsecu.dll";   string strKeypath = Server.MapPath("~/sap/verify.pse");    //放在根目录比较容易找   object tt;   tt = objSSO.EvalLogonTicket(strTicket, strKeypath, String.Empty); ...

On Building

慢慢添东西,嘿嘿,放了个ico上去,美女哦,三国11的貂婵。 原计划是把整个css改为我自己设计的那个css的,仔细看了一下,我的和现在用这个根本没法比嘛。

GridView Sort (排序)

GridView本身有一个 Sort() 函数: public virtual void Sort (     string sortExpression,    SortDirection sortDirection) 使用上相当方便。 但在实际使用中,常用的是点击每一列的标题来排序,点击标题会触发: protected void GridView_Sorting(object sender, GridViewSortEventArgs e) 事件。从 GridViewSortEventArgs 中可以拿到 SortDirection 和 SortExpression 。但是 GridView.Sort() 本身也会触发 GridView_Sorting() ,如果在 GridView_Sorting() 中调用 GridView.Sort() 会无限的循环,直到堆栈溢出。 这样就只能使用 DataView.Sort 属性来排序,再Bind到GridView上。 示例: protected string m_sortDirection {   get   {     if (ViewState["m_SortDirection"] == null)   {     return String.Empty;   }   return (string)ViewState["m_SortDirection"];   }     set { ViewState["m_SortDirection"] = value; } } protected string m_sortExpression {   get { return (string)ViewState["m_SortExpression"]; }   set { ViewState["m_SortExpression"] = value; } } protecte...