2011-09-30 54 views
-2

我有一个表字段的Datatypenumeric(10, 1)。该字段存储AmountPaid和用户更喜欢像78,234,673之间的输入与逗号的数量值,因为这是他们已经习惯了的东西,否则会作出了很多错误。如何允许用户输入逗号作为将存储在sql server 2005数字字段中的值?

有没有一种方法,我可以允许逗号的值,但在保存时删除它们,或者有什么办法可以将它们存储在SQL-SERVER而不更改DATATYPE

+0

用户如何输入数字? SQL Server不关心逗号和点,而是用户界面应用程序。无论如何,解决方案是让用户在他的电脑上选择所需的区域设置(包括数字格式)。如果他使用的应用程序不尊重它,它应该被修复。 –

回答

0

Double.Parse(TextBox1.Text)是我一直在寻找。

2

目前还不清楚您如何解析UI中的值或解析它们的类型,但您可能会发现NumberStyles.AllowThousands正是您所追求的。我假设你解析用户输入一个数字,传递一个到SQL Server作为参数值,而不是仅仅把它放置在SQL逐字...如果不是,那是使第一次变化。

0

我不知道你以后是什么,但如果你想基本上传入SQL一个整数的数组,你有没有想过传入你有的字符串(这似乎是在逗号分隔值),然后将它们分开转换为您在SQL中需要的值。然后将它们放在所需的表格中。

我不得不做类似的东西几天以前,但它是不具有分割功能,所以必须创建一个Oracle数据库。代码如下,你不应该将它翻译成SQL Server。

CREATE OR REPLACE PACKAGE SPLIT_FNC IS 
    -- Create a Type to be used as a temp table 
    TYPE strArray IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; 
    FUNCTION SPLIT_STR(word IN VARCHAR2) RETURN strArray; 
END; 

CREATE OR REPLACE PACKAGE BODY SPLIT_FNC IS 
    FUNCTION SPLIT_STR(word IN VARCHAR2) RETURN strArray IS items strArray; 
    temp NUMBER; 
    delim CHAR := ','; 
    start_index NUMBER := 1; 
    end_index NUMBER := -1; 
    BEGIN 
    temp := 1; 
    -- If INSTR can not find a match it will return 0 
    WHILE end_index != 0 LOOP 
     -- Find location of next comma 
     end_index := INSTR(word, delim, start_index, 1); 
     CASE 
     WHEN 
      end_index = 0 
     THEN 
      -- Catch the last value 
      items(temp) := SUBSTR(word, start_index); 
     ELSE 
      -- Get substring of start to next comma 
      items(temp) := SUBSTR(word, start_index, end_index - start_index); 
     END CASE; 
     start_index := end_index + 1; 
     temp := temp + 1; 
    END LOOP; 
    RETURN items; 
    END SPLIT_STR; 
END SPLIT_FNC; 

希望这是有帮助的 - 安口

相关问题