C# 使用TableAdapters将十进制从C错误地传递到SQL Server
昨天,我注意到在使用TableAdapters时出现了一个奇怪的行为,由于某种原因,当传递一个小于0.1的小数时,它会变成一个整数。例如,如果我通过1.0123,我可以在SQL分析器中看到1.0123,但如果我通过0.0123,我将得到123。是否存在已知问题?您可以执行以下步骤来重现问题: 创建一个新的数据库TestDatabase,并创建以下存储过程C# 使用TableAdapters将十进制从C错误地传递到SQL Server,c#,sql-server-2008,tableadapter,C#,Sql Server 2008,Tableadapter,昨天,我注意到在使用TableAdapters时出现了一个奇怪的行为,由于某种原因,当传递一个小于0.1的小数时,它会变成一个整数。例如,如果我通过1.0123,我可以在SQL分析器中看到1.0123,但如果我通过0.0123,我将得到123。是否存在已知问题?您可以执行以下步骤来重现问题: 创建一个新的数据库TestDatabase,并创建以下存储过程 create proc DecimalParametersSelect ( @Foo decimal(10,5) ) as sel
create proc DecimalParametersSelect
(
@Foo decimal(10,5)
)
as
select @Foo
创建新项目并添加新的数据集文件SampleDataset。添加新的TableAdapter和Add DecimalParameters选择为选择过程它应该是数据库中唯一的一个
运行项目并尝试选择一些数据,例如
using (SampleDatasetTableAdapters.DecimalParametersSelectTableAdapter dta = new SampleDatasetTableAdapters.DecimalParametersSelectTableAdapter())
{
var table = dta.GetData(0.01588M);
}
在探查器中,您应该看到传入的值是1588,有趣的是,返回的值在C中被正确识别为0.01588,这似乎是SQL探查器中的一个显示错误,因为跟踪中不包括TextData列,并且RPC命令的文本是从另一个源(可能是二进制数据)重建的 我按照您的步骤进行了操作,并能够使用SQL profiler中的默认跟踪在SQL 2008 R2上进行回购 但是,当跟踪属性更改为包含RPC:Completed的TextData列时,将显示正确的命令
那么什么是DecimalParametersSelectTableAdapter?Is似乎不是.Net基类库的一部分。无法复制-我在探查器VS2012RC中看到0.01588,SQL Server 2012看起来可能是特定于2008年的,正是如此。事实上,我在追逐另一个bug时偶然发现了它,我认为这两者是有联系的。看来我得继续找了。谢谢你的帮助。