逗号而不是句号

时间:2015-05-23 11:54:11

标签: 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]) values (1014758,'System-Rate Total',153640061,'No',21,67,'z8310905','CalcEngine',getdate(),6859)

问题在于< 21,67>应该是< 21.67>

上面的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包含逗号而不是句点(句号)。

但是,这在我的笔记本电脑上运行正常,但在我们尝试安装解决方案的服务器上运行不正常。我的笔记本电脑有Windows 7,服务器有Windows 8.该解决方案使用.Net Framework 4,VS 2010用于创建它。

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

 // Creating a Global culture specific to our application.
        System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-ZA");

        // Creating the DateTime Information specific to our application.
        System.Globalization.DateTimeFormatInfo dateTimeInfo = new System.Globalization.DateTimeFormatInfo();
        // Defining various date and time formats.            
        dateTimeInfo.LongDatePattern = "dd MMMM yyyy";
        dateTimeInfo.ShortDatePattern = "dd-MMM-yyyy";
        dateTimeInfo.LongTimePattern = "HH:mm:ss";
        dateTimeInfo.ShortTimePattern = "HH:mm";
        // Setting application wide date time format.
        cultureInfo.DateTimeFormat = dateTimeInfo;

        //Creating the Number Format Information specific to our application.
        System.Globalization.NumberFormatInfo numberInfo = new System.Globalization.NumberFormatInfo();
        numberInfo.NumberDecimalSeparator = ".";
        // Setting application wide number format.
        cultureInfo.NumberFormat = numberInfo;

        // Assigning our custom Culture to the application.
        CultureChanges.SetDefaultCulture(cultureInfo);

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

无论如何,我不知道该做什么或去哪里寻找这个错误。我想它必须与文化或服务器的不同设置有关。这个21.67的值可能是四舍五入的。

2 个答案:

答案 0 :(得分:0)

而不是传递文本框值声明变量double或float并将该文本框值赋值给变量并传递该变量以插入查询

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

将此付款传递给插入查询

答案 1 :(得分:0)

问题在于我正在以编程方式设置的文化(如原始帖子中的代码块所示)没有进入单个线程。因此,当我将代码插入到线程启动的位置时,每个线程都会获取正确的文化。