【发布时间】:2014-03-27 16:56:26
【问题描述】:
我正在尝试将前导零添加到我的数据集中只有 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
【问题讨论】:
-
数据库中
[Primary #]列的类型是什么?什么是数据库程序?主键真的必须是六个字符吗? -
[Primary #] 来自 Excel 文件,它是文本或数字格式,具体取决于文件(发件人不一致)。我会将它作为 varchar(6) 上传到我的 SQL 数据库中。
-
我建议按原样读取值,然后使用
Cstr(primaryId).PadLeft(6, "0"c)将其转换为字符串,然后再将其插入数据库。 DataGridView 是必需的吗? - 如果不是,那只会使事情复杂化。 -
Datagridview 允许我查看 Datatable 中的内容,以确保出现这些额外的零。之后,我的 excelCmd2 中的数据集在我的 sql 表中的所有列都具有相同的参数,如上所示。
标签: vb.net select oledbcommand