C # датируемый десятичный с точностью - PullRequest
3 голосов
/ 30 мая 2011

У меня есть этот код для добавления нового столбца в datatable:

DataColumn col = new DataColumn("column", typeof(decimal));      
col.Caption = "Column";
mytable.Columns.Add(col);

Как указать десятичную точность для этого столбца, чтобы значение всегда было в том формате, в котором я хочу его видеть?

Ответы [ 2 ]

1 голос
/ 09 июля 2015

У меня была такая же проблема, и я исправил ее, загрузив всю схему при запуске приложения, а затем ссылаясь на информацию столбца из схемы, как мне было нужно.

У меня есть только пример Visual Basic, но, надеюсь, это довольно легко перевести на C #

Настройка

' in whatever class you do your database communication:
Private _database As SqlDatabase
Private Shared _schema As DataTable

Sub New()
  ' or however you handle the connection string / database creation
  Dim connectionString as String = GetConnectionString()
  _database = New SqlDatabase(connectionString)

  RetrieveSchema()
End Sub


Private Function RetrieveSchema() as DataTable
  If _schema Is Nothing Then
    Using connection As SqlConnection = _database.CreateConnection()
      connection.Open()
      _schema = connection.GetSchema("Columns")
    End Using
  End If

  return _schema
End Function


Public Function GetColumnInformation(tableName As String, columnName As String) as DataRow
  Dim firstMatchingRow as DataRow = (
    From row In _schema.Rows _
    Where (
      row("TABLE_NAME") = tableName AndAlso row("COLUMN_NAME") = columnName)
    )).FirstOrDefault()

  Return firstMatchingRow
End Function

Использование

Dim columnInformation As DataRow = Dal.GetColumnInformation(tableName, columnName)

' find the precision
Dim precision = columnInformation("NUMERIC_PRECISION")
Dim scale = columnInformation("NUMERIC_SCALE")

' convert the decimal to the column's format
' e.g.: 2.345 with a scale of 2 would result in 
'       2.35
value = Decimal.Round(value, scale)
1 голос
/ 30 мая 2011

Вы не можете. Однако вы можете отформатировать значение, когда извлекаете его из таблицы, используя функцию String.Format:

String.Format("{0:0.##}", (Decimal) myTable.Rows[rowIndex].Columns[columnIndex]); 
...