在OLEDB命令语句中添加前导零

时间:2014-03-27 16:56:26

标签: vb.net select oledbcommand

我正在尝试向我的数据集中只有5个字符的主键添加前导零。我们的主键是6个字符,正在从我收到的Excel文件中删除前导零。我想在下面的命令语句中添加前导零,但它无法识别" CONVERT"功能。我还是新手,不知道要使用的类似功能。非常感谢您的帮助。

("SELECT (SELECT RIGHT('000000'+CONVERT(VARCHAR,[Primary #]),6)) AS [Primary #],[Gourmet #],[Unit],FROM [" + sheetName + "]", con)

以下完整代码

Dim sqlCon As New SqlConnection("Server=MyServer;Database=MyDatabase;User Id=xxx;Password=xxxxxx")
        sqlCon.Open()


        Dim excelCmd2 As New System.Data.OleDb.OleDbCommand("SELECT (SELECT RIGHT('000000'+CONVERT(VARCHAR,[Primary #]),6)) AS [Primary #],[Gourmet #],[Unit] FROM [" + sheetName + "]", con)
        Dim excelRead As New System.Data.OleDb.OleDbDataAdapter()
        Dim dt2 As New DataTable()
        excelRead.SelectCommand = excelCmd2
        excelRead.MissingSchemaAction = MissingSchemaAction.AddWithKey
        excelRead.Fill(dt2)
        DataGridView1.AutoGenerateColumns = True
        DataGridView1.DataSource = dt2
        DataGridView1.Refresh()

Datagridview允许我查看Datatable中的内容,以确保发生这些额外的零。之后,我的excelCmd2中的数据集的所有列都在我的sql表中等于参数:

Using dataRead As System.Data.OleDb.OleDbDataReader = excelCmd2.ExecuteReader()
                If dataRead.HasRows() Then
                    While dataRead.Read()
                        Dim sqlCmd As New SqlCommand
                        sqlCmd.Connection = sqlCon
                        sqlCmd.CommandType = CommandType.Text
                        sqlCmd.CommandText = sqlUpdate

                        sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #"))
                        sqlCmd.Parameters.Add("@spc", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Gourmet #"))
                        sqlCmd.Parameters.Add("@unit", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Unit"))
                        sqlCmd.ExecuteScalar()
                    End While
                End If
            End Using

2 个答案:

答案 0 :(得分:1)

虽然它不会让您看到添加的前导零,但您可以更改行

sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #")

sqlCmd.Parameters.Add("@primary", SqlDbType.VarChar).Value = Convert.ToString(dataRead.Item("Primary #").PadLeft(6, "0"c)

添加所需的前导零,这意味着您的SELECT命令被简化为

"SELECT [Primary #], [Gourmet #], [Unit] FROM [" & sheetName & "]"

(VB.NET中的字符串连接运算符为&,而不是+。)

答案 1 :(得分:0)

使用Padleft添加前导零。

primaryId.padleft(6, "0")

或者如果它还没有格式化为字符串

 primaryid.tostring.padleft(6, "0")

由于您希望在命令文本中使用填充版本,因此您可能希望创建一个临时字符串变量来保存新值,以帮助编写代码可读性。