C#DataRow.ToString()会自动格式化字符串

com*_*408 1 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;
}
Run Code Online (Sandbox Code Playgroud)

以下是它创建的输出: 格式错误

以下是我直接从SQL Server获得的内容: 格式正确

nvo*_*igt 5

您的数据表不包含查询数据库时看到的字符串,它是键入的,这意味着您拥有所选列的实际数据类型.因此DateTimes将被格式化为DateTimes和Decimals为Decimals.你看到的是默认行为.