修改C:\Program Files (x86)\CodeSmith\v6.5\Samples\Projects\CSharp\MySQLSchemaProvider\MySQLSchemaProvider.cs

修改GetCommandParameters方法,原本是没有实现的。一直报错误信息:GetCommandParameters() is not supported in this release.

        /// <summary>
/// Gets the parameters for a given command.
/// </summary>
/// <param name="connectionString">The connection string used to connect to the target database.</param>
/// <param name="command"></param>
/// <returns></returns>
public ParameterSchema[] GetCommandParameters( string connectionString, CommandSchema command )
{
// MySQL does not yet implement INFORMATION_SCHEMA.PARAMETERS
// MySQL Connector/Net 1.0.7 is supposed to support DeriveParameters()
// However, in my testing there appears to be a bug (throws a NULL reference exception)
// This method will be unsupported until a subsequent release of DeriverParameters()
// is working. // throw new NotSupportedException( "GetCommandParameters() is not supported in this release." ); /*
ArrayList a = new ArrayList();
ParameterSchema ps;
DbConnection cnx = null;
DbCommand cmd = null;
try
{
cnx = new DbConnection(connectionString); cmd = new DbCommand(command.Name, cnx);
cmd.CommandType = CommandType.StoredProcedure; cnx.Open();
IDbCommandBuilder.DeriveParameters(cmd);
cnx.Close(); foreach(MySqlParameter param in cmd.Parameters)
{
ps = new ParameterSchema(command, param.ParameterName, param.Direction, param.DbType,
param.MySqlDbType.ToString(), param.Size, param.Precision, param.Scale, param.IsNullable); a.Add(ps);
} }
catch
{
throw;
}
finally
{
if (cnx != null)
cnx.Close();
} return (ParameterSchema[]) a.ToArray(typeof (ParameterSchema));
*/ string commandText = string.Format("SELECT PARAMETER_NAME, DATA_TYPE, CHARACTER_OCTET_LENGTH, NUMERIC_PRECISION,"
+ " NUMERIC_SCALE, 0 IS_NULLABLE, PARAMETER_MODE"
+ " FROM INFORMATION_SCHEMA.PARAMETERS WHERE SPECIFIC_SCHEMA = '{0}' AND SPECIFIC_NAME = '{1}' AND ROUTINE_TYPE = 'PROCEDURE' ORDER BY ORDINAL_POSITION", command.Database.Name, command.Name);
List<ParameterSchema> parameterSchema = new List<ParameterSchema>(); using (DbConnection connection = CreateConnection(connectionString))
{
connection.Open(); DbCommand cmd = connection.CreateCommand();
cmd.CommandText = commandText;
cmd.Connection = connection; using (IDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
string name = reader.GetString( );
string nativeType = reader.GetString( );
long longSize = ( reader.IsDBNull( ) == false ) ? reader.GetInt64( ) : ;
byte precision = ( byte ) ( ( reader.IsDBNull( ) == false ) ? reader.GetInt32( ) : );
int scale = ( reader.IsDBNull( ) == false ) ? reader.GetInt32( ) : ;
bool isNullable = ( reader.IsDBNull( ) == false ) && reader.GetBoolean( );
string direction = reader.GetString( );
ParameterDirection paramDirection = ParameterDirection.Input;
switch(direction)
{
case "IN":
paramDirection = ParameterDirection.Input;
break;
case "OUT":
paramDirection = ParameterDirection.Output;
break;
case "INOUT":
paramDirection = ParameterDirection.InputOutput;
break;
default:
paramDirection = ParameterDirection.Input;
break;
}
int size = ( longSize < int.MaxValue ) ? ( int ) longSize : int.MaxValue; bool isUnsigned = ( nativeType.IndexOf( "unsigned" ) > - );
DbType type = GetDbType( nativeType, isUnsigned ); parameterSchema.Add(new ParameterSchema(command,name,paramDirection,type,nativeType,size,precision,scale,isNullable));
} if (!reader.IsClosed)
reader.Close();
} if (connection.State != ConnectionState.Closed)
connection.Close();
} return parameterSchema.ToArray();
}

编译后生成SchemaExplorer.MySQLSchemaProvider.dll,覆盖程序安装目录中SchemaProviders目录的同名文件。

修改后替换目录(C:\Program Files (x86)\CodeSmith\v6.5\SchemaProviders\SchemaExplorer.MySQLSchemaProvider.dll)中的同名文件。

启动CodeSmith后,需要在Schema Explorer中删除原来的MySQL数据库,重新添加,不然会报错。

也可以先卸载GAC中的SchemaExplorer.MySQLSchemaProvider.dll,然后将自己修改、编译并签名后的SchemaExplorer.MySQLSchemaProvider.dll安装到GAC中。

修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider的更多相关文章

  1. CodeSmith中SchemaExplorer属性的介绍

    CodeSmith与数据库的联系,在CodeSmith中自带一个程序集SchemaExplorer.dll,这个程序集中的类主要用于获取数据库中各种对象的结构. <%@ Property Nam ...

  2. Map java中的map 如何修改Map中的对应元素

    Map java中的map 如何修改Map中的对应元素 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象.         Map的接口         Map ...

  3. Java反射机制可以动态修改实例中final修饰的成员变量吗?

    问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...

  4. 何修改WAMP中mysql默认空密码--转

    何修改WAMP中mysql默认空密码  http://www.cnblogs.com/hooray/archive/2011/07/23/2114792.html WAMP安装好后,mysql密码是为 ...

  5. 使用jquery修改css中带有!important的样式属性

    当CSS中含有!important的样式属性时,普通的修改方式是会出现失败的.如下: <div class="test">使用jquery修改css中带有!import ...

  6. 以NameValueCollection 修改URL中的查询参数

    以NameValueCollection 修改URL中的查询参数 本文参考于:http://www.c-sharpcorner.com/Blogs/9421/add-remove-or-modify- ...

  7. 修改数据库中group_concat的返回结果的长度限制

    修改数据库中group_concat的返回结果的长度限制 我们可以使用Mysql的客户端管理工具,Sqlyog 新建一个查询编辑器 显示  SHOW VARIABLES LIKE "grou ...

  8. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  9. SVNKIT的low api应用之修改库中文件内容(File modification)

    最近在做一个仓库管理系统,架构在svn之上.要求每一项操作要记录在log文件中,弄了很久起初感觉无法向库中的文本文件添加东西,就是修改库中的文本文件.于是采用了一个很笨的办法:    现将库中的log ...

随机推荐

  1. [NOI2002]荒岛野人(exgcd,枚举)

    题目描述 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,…,M.岛上住着N个野人,一开始依次住在山洞C1,C2,…,CN中,以后每年,第i个野人会沿顺时针向前走Pi ...

  2. ab工具测试 swoole 和 ngixn+php-fpm 的并发对比

    测试样例: 执行的一条sql记录的1w次插入分两组: 一组用nginx+pfm 来执行, 一组用swoole 来执行 公平性保证前提: @1.为了保证公平性, 在nginx里把 access_log, ...

  3. MySql学习笔记06

    课程回顾 一对一关联 案例1:查询每个员工的名字和主管领导的名字 select e.ename 员工姓名,m.ename 领导姓名 from emp e join emp m on e.mgr=m.e ...

  4. Linux入门-第三周

    1.总结vim命令行模式常见快捷方式,以及vim查找,替换的方法 vim [options] [file ..] +# 打开文件后,让光标处于第#行的行首,(默认行尾) 举例vim +10 /etc/ ...

  5. android Service服务简介(一)

    作为android的四大组件之一,服务也少不了很多重要的知识点.下面我们从最基本的开始学习. 1.1服务的创建 首先创建一个ServiceTest类继承Service.我们会重写onCreate(), ...

  6. wampserver 服务器报500错误,侦察小结

    Internal Server Error The server encountered an internal error or misconfiguration and was unable to ...

  7. WordPress4.9 最新版本网站安全漏洞详情与修复

    wordpress 目前互联网的市场占有率较高,许多站长以及建站公司都在使用这套开源的博客建站系统来设计网站,wordpress的优化以及html静态化,深受google以及搜索引擎的喜欢,全世界大约 ...

  8. 6-C++远征之封装篇[上]-学习笔记

    C++远征之封装篇(上) 课程简介 类(抽象概念),对象(真实具体) 配角: 数据成员和成员函数(构成了精彩而完整的类) 构造函数 & 析构函数(描述了对象的生生死死) 对象复制和对象赋值 ( ...

  9. AVL重平衡细节——插入

    话说这个系列鸽了好久,之前在准备语言考试,就没管博客了,现在暑假咱们继续上路! 每当我们进行一次插入之后,整棵AVL树的平衡性就有可能发生改变,为了控制整棵树的高度,我们需要通过一系列变换(重平衡)来 ...

  10. Python的类(二)

    一.类的重写 对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写.为此,可在子类中定义一个这样的方法,即它与要重写的父类方法同名.这样, Python将不会考虑这个父类方法,而只关注你 ...