修改CodeSmith中的SchemaExplorer.MySQLSchemaProvider

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

修改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>publicParameterSchema[] GetCommandParameters(stringconnectionString, 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));*/stringcommandText =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 =newList<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())

{stringname = reader.GetString(0);stringnativeType = reader.GetString(1);longlongSize = ( reader.IsDBNull(2) ==false) ? reader.GetInt64(2) :0;byteprecision = (byte) ( ( reader.IsDBNull(3) ==false) ? reader.GetInt32(3) :0);intscale = ( reader.IsDBNull(4) ==false) ? reader.GetInt32(4) :0;boolisNullable = ( reader.IsDBNull(5) ==false) && reader.GetBoolean(5);stringdirection = reader.GetString(6);

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;

}intsize = ( longSize <int.MaxValue ) ? (int) longSize :int.MaxValue;boolisUnsigned = ( nativeType.IndexOf("unsigned") > -1);

DbType type=GetDbType( nativeType, isUnsigned );

parameterSchema.Add(newParameterSchema(command,name,paramDirection,type,nativeType,size,precision,scale,isNullable));

}if(!reader.IsClosed)

reader.Close();

}if(connection.State !=ConnectionState.Closed)

connection.Close();

}returnparameterSchema.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中。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航