Vb.net 在OLEDB命令语句中添加前导零
我正在尝试向数据集中只有5个字符的主键添加前导零。我们的主键是6个字符,前导零从我收到的Excel文件中被切断。我想在下面的命令语句中添加前导零,但它无法识别CONVERT函数。我仍然是新的,不知道类似的功能使用。非常感谢你的帮助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) 完整
("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 & "]"