Как можно разрешить пользователям вводить запятые в значении, которое будет храниться в числовом поле sql server 2005? - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть поле таблицы, чье значение Datatype равно numeric(10, 1).В этом поле хранится AmountPaid, и пользователь предпочитает вводить значение суммы с запятыми между, например, 78,234,673, потому что это то, к чему они привыкли, иначе они будут совершать много ошибок.

Есть лиспособ, которым я могу разрешить запятые в значении, но удалить их при сохранении, или есть способ, которым я могу пойти дальше и сохранить их в SQL-SERVER без изменения DATATYPE?

Ответы [ 3 ]

2 голосов
/ 30 сентября 2011

Непонятно, как вы анализируете значения из пользовательского интерфейса или какой тип вы их анализируете, но вы можете обнаружить, что NumberStyles.AllowThousands - это то, что вам нужно. Я предполагаю, что вы анализируете ввод пользователя как число и передаёте его в SQL Server в качестве значения параметра, а не просто включаете его в дословный перевод SQL ... если нет, то это первое изменение, которое нужно сделать.

0 голосов
/ 30 сентября 2011

Double.Parse (TextBox1.Text) - это то, что я искал.

0 голосов
/ 30 сентября 2011

Я не уверен, что вы после, но если вы хотите в основном передать в 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;

Надеюсь, это полезно - Ankou

...