【发布时间】:2019-03-13 19:52:22
【问题描述】:
我遇到了嵌套 SQL 代码的问题。它基于 Nvarchar 获取一个 INT 变量,我不明白为什么这会返回错误,所以可以使用你的帮助。
我有一个表结构如下-
SONGS_DB SONG_ID、SONG_NAME
SONG_PLAYLIST SONG_PLAYLIST_ID、SONG_ID、PLAYLIST_ID
- 播放列表 PLAYLIST_ID,PLAYLIST_NAME
我正在尝试使用以下代码从一个播放列表中获取所有歌曲以显示在 datagridviewer 中-
Dim con As New SqlConnection With {.ConnectionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\coolj\OneDrive\Documents\Loop\Loop\Songs_SQL.mdf;Integrated Security=True"}
Dim cmd As New SqlCommand("SELECT SONG_ID, SONG_NAME FROM SONGS_DB WHERE SONG_ID IN (SELECT SONG_ID FROM SONG_PLAYLIST WHERE PLAYLIST_ID IN (SELECT PLAYLIST_ID FROM Playlist WHERE PLAYLIST_NAME = (@NAME)))", con)
cmd.Parameters.AddWithValue("@NAME", ComboBox1.SelectedIndex)
Dim Ada As New SqlDataAdapter(cmd)
Dim Table As New DataTable()
Ada.Fill(Table)
DataGridView1.DataSource = Table
End Sub
但是它返回以下错误-
'将 nvarchar 值 'Party Hits' 转换为数据类型 int 时转换失败。'
派对点击是第一个播放列表的名称,我对此感到困惑,因为我认为没有理由将派对点击转换为 int。有什么想法吗?
【问题讨论】:
-
尝试使用 selecteditem 而不是 selectedindex,您正在将 int 与 SQL 中的文本字段进行比较
-
请说明如何填充 ComboBox1 项目集合。你使用 DataSource 还是 Items.Add ?
-
PLAYLIST_NAME 似乎包含一个“名称”,其中 .SelectedIndex 应该是一个 int。我错过了什么?