Код работал отлично в течение длительного времени, пока кто-то не добавил новое имя (SE01) в базу данных SQL, из-за чего веб-программа вылетает из строя. Веб-ошибка показала, чтоОшибка запроса SQL Union с помощью vb.net
System.InvalidCastException: Conversion from string "SE01" to type 'Integer'
is not valid.
наряду с другой ошибкой запроса SQL Union,
SELECT Substring([Name],@lenSrv, 8) as Name
FROM [dbo].[ServerOwners]
where [Name] like @Srv
and Name not like '%j%'
union
SELECT Substring([Server],@lenSrv, 8) as Name
FROM [dbo].[AuditLog]
where log='delete'
and [DATE] > (GETDATE() - 60)
and [SERVER] like @Srv
and Server not like '%j%'
order by [name]
кода задачей найти следующее доступное имя через базу данных с помощью запроса, например, существует имя_сервер в базе данных UXVP001, и код найдет бесплатный, который будет UXVP002. Теперь кто-то добавил UXVPSE01 в базу данных SQL, которая, кажется, вызывает запрос чтения. Я хочу, чтобы это было принято/проигнорировано новым именем без ошибок.
Здесь пропущено VB коды, поиск по базе данных,
srv = "UXPV"
sqlAddOn = "and Name not like '%j%'"
sqlAddOnAudit = "and Server not like '%j%'"
"Logic to find next available name"
"1. select the numbers to the right of the characters"
"2. loop all values and find first missing number"
Dim sqlConn As New System.Data.SqlClient.SqlConnection((ConfigurationManager.ConnectionStrings("SOCT").ConnectionString))
Dim strSql As String = "SELECT Substring([Name],@lenSrv, 8) as Name FROM [dbo].[ServerOwners] where [Name] like @Srv " & sqlAddOn
strSql &= " union "
strSql &= "SELECT Substring([Server],@lenSrv, 8) as Name FROM [dbo].[AuditLog] where log='delete' and [DATE] > (GETDATE() - 60) and [SERVER] like @Srv " & sqlAddOnAudit
strSql &= " order by [name]"
Dim cmd As New System.Data.SqlClient.SqlCommand(strSql, sqlConn)
Dim dr As System.Data.SqlClient.SqlDataReader
LabelError.Text = ""
Dim x As Integer = 1
Dim y As Integer = 1
Dim foundYet As Boolean = False
Try
sqlConn.Open()
cmd.Parameters.AddWithValue("@lenSrv", srv.Length + 1)
cmd.Parameters.AddWithValue("@Srv", srv & "%")
dr = cmd.ExecuteReader()
While dr.Read() And foundYet = False
LabelError.Text = LabelError.Text & dr("Name") & " | "
y = CType(dr("Name"), Integer)
If x = y Then
"keep going"
x = x + 1
Else
"you found first available number"
foundYet = True
End If
End While
dr.Close()
cmd.Dispose()
Catch ex As Exception
hide()
PanelError.Visible = True
LabelError.Text = ex.ToString() & "<hr/>" & strSql
Finally
sqlConn.Dispose()
End Try
"make sure leading zeros are present"
" 000"
Dim fmt As String = "00#"
tbAdd_ServerName.Text = srv & x.ToString(fmt)
tbAdd_ServerName.Enabled = False
tbAdd_TM.SelectedValue = "*"
Часть информации, которую вы не указали, состоит в том, что ее ошибка в строке 'y = CType (dr (« Name »), Integer)' right? –