Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在OLEDB命令语句中添加前导零_Vb.net_Select_Oledbcommand - Fatal编程技术网

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

Vb.net 在OLEDB命令语句中添加前导零,vb.net,select,oledbcommand,Vb.net,Select,Oledbcommand,我正在尝试向数据集中只有5个字符的主键添加前导零。我们的主键是6个字符,前导零从我收到的Excel文件中被切断。我想在下面的命令语句中添加前导零,但它无法识别CONVERT函数。我仍然是新的,不知道类似的功能使用。非常感谢你的帮助 ("SELECT (SELECT RIGHT('000000'+CONVERT(VARCHAR,[Primary #]),6)) AS [Primary #],[Gourmet #],[Unit],FROM [" + sheetName + "]", con) 完整

我正在尝试向数据集中只有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中的内容,以确保这些额外的零出现。之后,来自my excelCmd2的数据集的所有列在my 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

使用Padleft添加前导零

primaryId.padleft(6, "0")
或者如果它尚未格式化为字符串

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

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

尽管它不能让您看到添加的前导零,但您可以更改行

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

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

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

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

数据库中[Primary]列的类型是什么?什么是数据库程序?主键真的需要是六个字符吗?[primary]来自Excel文件,它是文本格式还是数字格式,取决于发件人不一致的文件。我将把它作为varchar6上传到我的SQL数据库中。我建议按原样读取中的值,然后使用CstrprimaryId.PadLeft6,0c将其转换为字符串,然后再插入数据库中。是否需要DataGridViewDatagridview允许我查看Datatable中的内容,以确保这些额外的零出现。之后,我的excelCmd2中的数据集的所有列在我的sql表中都具有相同的参数,如您所见。我不确定如何在我的代码中使用此参数。数据集中我的列名为[主]。我如何在Select命令的列名[Primary]下填充所有内容,或者按照您描述的方式填充所有内容?您将继续从Excel文件中读取您的5位数字,就像正常情况一样,不进行任何转换。然后,当您执行INSERT语句时,您将插入值primaryId.padleft6,0I从前面删除了一个假逗号,以防它出现在您的实际代码中。您在我的代码的参数添加部分的修复效果非常好。我不理解{&}和{+}之间的区别,因为我从未遇到过使用{+}连接字符串的问题。我将对此进行更多的研究。谢谢你,朋友!
"SELECT [Primary #], [Gourmet #], [Unit] FROM [" & sheetName & "]"