Exceptions such as NotSupportedException not handled gracefully in
CreateParametersForStatementText()
-----------------------------------------------------------------------------------------------------
Key: IBATISNET-49
URL: http://issues.apache.org/jira/browse/IBATISNET-49
Project: iBatis for .NET
Type: Bug
Versions: DataMapper 1.1
Environment: [assembly: AssemblyVersion("1.1.458")]
Reporter: Ron Grabowski
Assigned to: Gilles Bayon
SQLite:
http://www.sqlite.org/
doesn't have strongly typed data columns like most other databases. The
SQLite.Net provider:
http://sourceforge.net/projects/adodotnetsqlite
throws NotSupportedExceptions when code like this is executed:
((IDbDataParameter)dataParameter).Precision = property.Precision;
[NotSupportedException: Specified method is not supported.]
Finisar.SQLite.SQLiteParameter.set_Precision(Byte value)
IBatisNet.DataMapper.Configuration.Statements.PreparedStatementFactory.CreateParametersForStatementText()
A naive way to solve this is to simply wrap the setting of IDbDataParameter
properties in a try/catch block:
try
{
// Set IDbDataParameter
if (property.Size != -1)
{
((IDbDataParameter)dataParameter).Size = property.Size;
}
((IDbDataParameter)dataParameter).Precision = property.Precision;
((IDbDataParameter)dataParameter).Scale = property.Scale;
}
catch
{
}
This thread:
http://tinyurl.com/atwzn
http://www.mail-archive.com/[email protected]/msg00317.html
talks about similiar issues with an Oracle provider that can be solved by not
setting the certain IDbDataParameter properties. Perhaps it may be worthwhile
to look into adding additional attributes to the <provider> nodes in
providers.config to specify which properties of the IDbDataParameter to set.
For example this is how a <provider> entry may look after incorporating this
idea as well as ideas from IBATISNET-48 and IBATISNET-47:
<provider
name="SQLite3"
enabled="true"
assemblyName="SQLite.NET, Version=0.21.1869.3794, Culture=neutral,
PublicKeyToken=c273bd375e695f9c"
connectionClass="Finisar.SQLite.SQLiteConnection"
commandClass="Finisar.SQLite.SQLiteCommand"
parameterClass="Finisar.SQLite.SQLiteParameter"
parameterDbTypeClass="System.Data.DbType, System.Data"
parameterDbTypeProperty="DbType"
dataAdapterClass="Finisar.SQLite.SQLiteDataAdapter"
commandBuilderClass="Finisar.SQLite.SQLiteCommandBuilder"
usePositionalParameters = "true"
useParameterPrefixInSql = "false"
useParameterPrefixInParameter = "false"
parameterPrefix=""
setDbParameterPrecision="false"
setDbParameterScale="false"
setDbParameterSize="false"
/>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira