gpt4 book ai didi

c# - 实时数据库不接受十进制值

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:06 24 4
gpt4 key购买 nike

我正在使用以下代码将一些数据插入数据库:

internal int InsertSample(Sample sample)
{
using (var db = new OleDbConnection(connectionString))
{
var query = Constants.InsertNewSample;
return db.Execute(query, sample);
}
}

当我通过 Visual Studio 在本地运行它时它工作正常。

但是,当我发布站点并尝试插入时,出现错误:

Data type mismatch in criteria expression.

堆栈跟踪

[OleDbException (0x80040e07): Data type mismatch in criteria expression.]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1138392
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +208
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +58
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +162
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +107
Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) +93
Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) +758
MVCQCPage.Helpers.Access.InsertSample(Sample sample) +208

但这只有在 Sample.MassOff 的值为十进制格式(例如 1.6)时才会发生。

如果此值作为整数传递(例如 5),则在调试时和发布后它可以正常工作。

这怎么可能????

数据库中的数据类型为numericSample.MassOff的数据类型为string

如果我可以提供更多详细信息,请告诉我。

最佳答案

系统文化一定是这里的一个问题。确保您的开发系统和部署系统的文化相同。

如果您无法控制/更改部署系统的文化,您可以按如下方式设置应用程序的文化:

Web 应用程序(您的案例)

web.config中设置globalization属性

<configuration>
<system.web>
<globalization culture="en-US" uiCulture="en-US" />/*Whatever your default culture you want to use irrespective of system*/
</system.web>
</configuration>

Windows 应用程序(可能对其他人有帮助)

如果您使用的是 DotNet Framework 4.5,则执行以下操作:

CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("en-US");//Whatever your default culture you want to use irrespective of system
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;

如果您使用的是 DotNet Framework 4 或更早版本,请遵循以下技巧:

CultureInfo cultureInfo = CultureInfo.CreateSpecificCulture("en-US");//Whatever your default culture you want to use irrespective of system
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;

Type type = typeof(CultureInfo);
type.InvokeMember("s_userDefaultCulture",
BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static,
null,
cultureInfo,
new object[] { cultureInfo });

type.InvokeMember("s_userDefaultUICulture",
BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Static,
null,
cultureInfo,
new object[] { cultureInfo });

在您的应用程序开始时调用上面的代码。

关于c# - 实时数据库不接受十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com