填充0的 - MySQL

时间:2012-10-12 13:03:27

标签: c# mysql select datatable zero-pad

所以,我有一个列是我的关键列和自动增量,所以它不能是varchar或任何有趣的。

请保留“Erhmahgerd urse werb contrerls”,因为我喜欢控制自己的HTML流程而不喜欢将其交给.NET。我从未有过这方面的好经验(而且我喜欢我的代码是合规的)。我不希望这是一场火焰战或任何事情 - 我只想用零填充。我觉得有必要说这个,因为它发生的次数太多了。

所以,无论如何。

DataTable tabledata = new DataTable();  
using (OdbcConnection con = new OdbcConnection(conString)) {
    using (OdbcCommand com = new OdbcCommand("SELECT * FROM equipment_table", con)) {
        OdbcDataAdapter myAdapter = new OdbcDataAdapter();
        myAdapter.SelectCommand = com;
        try {
            con.Open();
            myAdapter.Fill(tabledata);
        } catch (Exception ex) {
            throw (ex);
        } finally {
            con.Close();
        }
    }
}
Response.Write("<table id=\"equipment_listtable\"><thead><tr><th>Equipment ID</th><th>Equipment Name</th><th>Equipment Description</th><th>Type</th><th>In Use?</th><th>iOS Version (if applicable)</th><th>Permission Level</th><th>Status</th><th>Asset Tag</th><th>Details</th><th>Change</th><th>Apply</th></tr></thead>");
foreach (DataRow row in tabledata.Rows) {
    int counter = (int)row["Equipment_ID"];
    Response.Write("<tr>");
    foreach (var item in row.ItemArray) {
        Response.Write("<td>" + item + "</td>");
    }
    Response.Write("This stuff is irrelevant to my problem, so it is being left out... It uses counter though, so no complaining about not using variables...");
}
Response.Write("</table>");

可以想象,我的键列的值在生成的表中如下所示:

1
10
11
12
13
14
15
16
17
18
19
20
2
21

等。我想用0填充来解决这个问题。做这个的最好方式是什么?在生成表格时,有没有办法定位SPECIFIC字段?我查看了DataRow.Item,但我总是发现MSDN文档有点难以理解。

或者,我可以SELECT *然后在*?

中的一个特定字段上使用mysql的lpad

谢谢!

3 个答案:

答案 0 :(得分:1)

SELECT *通常不是一个好主意。通过编写查询,它不可避免地导致比节省时间更多的问题 这将允许您在列上使用LPAD。

我打算建议使用类似的东西:
    Response.Write(“”+ item.ToString.PadLeft(2,'0')+“”);

但是因为你只是循环每个项目并以相同的方式呈现它们,所以上面会填充每个单元格。

所以我认为您最好的选择是更改查询以指定每一列。然后你可以根据需要填充场地 或者如果您只关心它们没有被正确排序(即按照字母而不是整体排序),请使用ORDER BY。

或者,为从数据库读取的每个单元格创建一个变量,并单独渲染每个单元格。 如果您需要,这将为您提供更多自定义选项。

答案 1 :(得分:0)

您确实总是明确指定列名,而不是使用* - 请参阅here

如果你坚持使用*,那么只需将填充值作为另一个字段:

SELECT *,LPAD("Equipment_ID", 2, '0') as Equipment_ID_Padded FROM equipment_table

如果您的Equipment_ID超过2位,请记住LPAD会截断。

更好的解决方案可能是使用String.FormatToString("D2");

填充代码中的值
string paddedString = string.Format("{0:d2}", (int)row["Equipment_ID"]));

答案 2 :(得分:0)

您可以使用.ToString(“D”+前导零数)在C#中添加填充; 例如。如果counter = 34并且你调用counter.ToString(“D5”),你将获得00034。

如果您正在使用字符串,最简单的方法是convert.toInt32()然后应用上述内容。

如果你不想继续使用字符串,只需查看--printf whups错误的语言 - String.Format。