C#DataRow.ToString()在不应该的时候自动格式化字符串

时间:2014-08-05 13:55:19

标签: c# sql sql-server formatting

我已经编程了一段时间,但我从来没有见过这种情况,所以我对发生了什么感到困惑。我正在做的是我在数据库上执行SP,并在实际使用它之前测试它的输出我将这些行放入管道分隔的字符串中。出于某种原因,当我将文本框设置为这些结果时,它将日期从SQL Server格式化为DateTime变量,将1.99小数格式化为1.9900小数。

另外还有一个注意事项:我不想通过按列名称调用特定列来访问列数据。我想这样做,以便我可以更改并在数据库中向SP添加列,这将继续工作并从SP中恢复所有列。

最后一个日期时间的秒数也不一样,因为查询是在不同时间运行的,所以不用担心。

任何人都知道这里发生了什么?

以下是获取数据并创建管道分隔字符串的代码:

private string GetHourlySales()
{
    StringBuilder output = new StringBuilder();
    DataTable tblData = new DataTable();

    using (SqlConnection conn = new SqlConnection(GetConnectionString()))
    {
        string sql = "EXEC [dbo].[ryan_GetSalesSummary] 0";
        using (SqlCommand cmd = new SqlCommand(sql, conn))
        {
            try
            {
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader();
                tblData.Load(dr, LoadOption.Upsert);
                conn.Close();
            }
            catch (Exception) { }
        }
    }

    foreach (DataRow row in tblData.Rows)
    {
        for (int i = 0; i < tblData.Columns.Count; i++)
        {
            if (i > 0)
                output.Append("|");
            if (i == tblData.Columns.Count - 1)
                output.AppendLine(row[i].ToString());
            else
                output.Append(row[i].ToString());
        }
    }

    if (tblData.Rows.Count > 0)
        return output.ToString();
    else
        return null;
}

以下是它创建的输出: incorrect formatting

以下是我直接从SQL Server获得的内容: correct formatting

1 个答案:

答案 0 :(得分:5)

您的数据表不包含您在查询数据库时看到的字符串,它是键入的,这意味着您拥有所选列的实际数据类型。因此DateTime s的格式设置为DateTime s和Decimal s Decimal s。你看到的是默认行为。