C# 逗号代替句号

C# 逗号代替句号,c#,sql-server,C#,Sql Server,我收到以下错误: System.FormatException:输入字符串的格式不正确 System.Exception:未知错误:INSERT语句中的列少于values子句中指定的值。values子句中的值数必须与INSERT语句中指定的列数匹配 INSERT语句很容易看出这一点: INSERT INTO [dbo].[Out] ([Tag],[Element],[PeriodID],[Pay],[Output Value],[User],[Source],[Date],[ElementID]

我收到以下错误:

System.FormatException:输入字符串的格式不正确

System.Exception:未知错误:INSERT语句中的列少于values子句中指定的值。values子句中的值数必须与INSERT语句中指定的列数匹配

INSERT语句很容易看出这一点:

INSERT INTO [dbo].[Out] ([Tag],[Element],[PeriodID],[Pay],[Output Value],[User],[Source],[Date],[ElementID]) values (1014758,'System-Rate Total',153640061,'No',21,67,'z8310905','CalcEngine',getdate(),6859)
问题在于应该采取什么行动

上面的INSERT语句是用C#创建的,如下所示:

 commandText.AppendLine(string.Format("INSERT INTO [dbo].[Out] ([Tag],[Element],[PeriodID],[Pay],[Output Value],[User],[Source],[Date],[ElementID]) values ({0},'{1}',{2},'No',{3},'{4}','CalcEngine',getdate(),{5})", Tag, tx.ElementName, periodID, tx.Value, user, tx.ElementID));
因此,包含逗号而不是句点(句号)的是tx.Value

但是,这在我的笔记本电脑上运行良好,但在我们试图安装解决方案的服务器上运行不好。我的笔记本电脑有Windows7,服务器有Windows8。此解决方案使用.NETFramework4,VS2010用于创建它

我试图在控制面板中设置与笔记本电脑完全相似的服务器文化、语言等。 我甚至在代码中添加了以下内容,试图阻止后续安装中发生类似的情况(用于后台查看):

这是在Windows服务的主方法中输入的,它启动另一个进程,最终执行上述INSERT语句。 (不确定是否也需要将其添加到衍生流程中?)


无论如何,我不知道还有什么要做,也不知道该去哪里寻找这个错误。我想这一定是因为服务器的文化或不同的设置。21.67这个值可能是四舍五入的

不是传递文本框值,而是声明变量double或float,并将该文本框值赋给变量,然后将该变量传递给insert查询

double Pay;
Pay=Double.Parse(tx.value)

传递此pay to insert查询

问题是我以编程方式设置的区域性(如原始帖子中的代码块所示)没有到达各个线程。因此,当我在线程开始的地方插入代码时,每个线程都会获得正确的区域性。

为什么要将其保存为字符串?即使不是double,也要先将其解析为double,然后插入该值,并将列类型更改为映射的double类型。您应该始终为您的值选择正确的数据类型。阅读:可以
{3:##0.00}
解决它吗?)。能否以字符串格式将.Replace(“,”,“.”)添加到变量中?切勿像这样连接sql。使用参数化查询或更好的存储过程。@Soner Gönül,@Zohar Peled,我同意你的看法。编写SQL肯定有更好的方法。但是,上面的语句是在块中执行的数百条其他语句之一。在我们的解决方案的其余大部分中,我们使用LinqToSQL,但是我们不能为每个插入都命中DB。有数千个项目,每个项目都有数百个这样的插入。也就是说,让我们试着继续前进。为什么这可以从我的笔记本电脑而不是服务器上运行?代码中没有文本框。tx.value来自一个列表对象列表,在本例中T是两倍。这与shA.t和kidshaw的上述评论类似。我更喜欢解决根本问题的东西。记住,这在我的笔记本电脑上有效,为什么不在服务器上呢?
double Pay;
Pay=Double.Parse(tx.value)