SQL Сервер 2019 Кодировка UTF-8 не вставляется из vb. net Загрузка MP3 и сценарий REGEX - PullRequest
0 голосов
/ 31 января 2020

SQL Сервер 2019 | nvarchar | Параметры сортировки: Latin1_General_100_CI_AI

Я выполнил тест с простым оператором вставки в свою базу данных, чтобы убедиться, что он будет правильно вставлять данные из веб-формы. Эти данные: Зал Дворжака Данные вставляются, как и ожидалось, с помощью простого сценария вставки. Однако это не относится к моему сценарию загрузки MP3. Ниже приведена основная часть кода, чтобы показать, что делается с метаданными, как только они попадают в сценарии, прежде чем они будут вставлены в базу данных SQL Server. Есть несколько записей в метаданных MP3, которые разделены прямой меткой sla sh, и эти записи имеют двойные фигурные скобки вокруг них, где REGEX вступает в игру в коде. код vb. net

postedFile.SaveAs(Convert.ToString(savepath & "\") + Convert.ToString(getfile & ".mp3"))
Dim mp3 As New ID3TagLibrary.MP3File(Server.MapPath("Files/" + getfile & ".mp3"))
Dim strWriters As String = Replace(mp3.Comment, "eng", "")
Dim Regex4 As Regex = New Regex("\{{.*?\}}")
Dim matches4 As MatchCollection = Regex4.Matches(strWriters)
Dim count4 As Integer = matches4.Count
Dim sV As String = matches4(0).Value.ToString 'Venue

Теперь оператор вставки.

Dim Vparts As String() = sV.Split(New Char() {"/"c})
Dim Vpart As String
For Each Vpart In Vparts
strVenues = "INSERT INTO Venue(VName)VALUES(@VName)"
VenueCMD = New SqlCommand(strVenues, Artistcon)
VenueCMD.Parameters.Add(New SqlParameter("@VName", Vpart))
Try
VenueCMD.ExecuteNonQuery()
Catch ex As Exception
Finally
End Try

ОБНОВЛЕНИЕ Я провел тест, когда файл впервые загружается на сервер при захвате метаданных. В этот момент Dvořák Hall изменяется на DvoYk Hall

Кажется, существует проблема с сохранением формата после начала чтения файла. Это то, что я сделал

Dim strWriters As String = Replace(mp3.Comment, "eng", "")
Response.Write(strWriters)
Response.End()

Вывод: {{DvoYk Hall}}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Все сводилось к следующему.
Проблема с файлом DLL DLL, который я использовал. Я изменил его и начал использовать TagLib-Sharp. Этот компонент сохраняет форматирование и может загружать данные в базу данных без каких-либо проблем.
Что помогло мне добраться до этого, был старый пост, который я сделал здесь на SO .

Я оглянулся на старый пример кода, который я создал во время создания вышеупомянутого потока, и загрузил его с mp3-файлом с акцентированным текстом. И ва-ла работал как шарм.

Теперь все хорошо.
Если какой-то урок можно извлечь из этого, это следующее.
Никогда не используйте что-то, что больше не находится в разработке , но придерживайтесь тех, которые еще находятся в разработке.

0 голосов
/ 31 января 2020

Вместо того, чтобы добавлять новый параметр каждый раз, вам нужно создать один параметр и изменить его значение, например:

Dim sql = "INSERT INTO Venue(VName) VALUES (@VName)"

Using conn As New SqlConnection("your connection string here"),
        cmd As New SqlCommand(sql, conn)

    ' Create the parameter
    'TODO: set .Size parameter to the correct value.
    cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@VName", .SqlDbType = SqlDbType.NVarChar, .Size = 255})

    For Each vPart In Vparts
        ' Set the value of the parameter each time round the loop
        cmd.Parameters("@VName").Value = vPart
        cmd.ExecuteNonQuery()
    Next

End Using
...