2015-05-08 7 views
1

У меня есть процедура вызова модуля, и я хочу его параметризовать. Я отправляю строку в качестве запроса в модуль процедуры. Я смотрю уже в google, но я не мог найти ответ на свою проблему.Параметрирование sql в vb

Procedures.Insert("INSERT INTO Technician (tec_name, tec_email, rol_id) VALUES ('" & txt_tech.text & "', '" & txt_tech_email.text & "', " & cbo_tech_role.selectvalue.tostring & ")", "Technican Add Correct") 

======================================== Я буду вероятно, изменить его .....

Procedures.Insert("INSERT INTO Technician (tec_name, tec_email, rol_id) VALUES ('@tech_name', '@tech_email', '@tech_role' ")", "Technican Add Correct") 

================ Но я не знаю, где я могу параметризованном

Public Sub Insert(query As String, msg As String) 
    Dim cn As New SqlConnection(cs) 
    Dim cmd As New SqlCommand 
    Try 
     cn.Open() 
     With cmd 
      .CommandType = CommandType.Text 
      .CommandText = query 
      .Connection = cn 
      .Parameters.AddValueWith("@tech_name",txt_tech_name.text) 
      .Parameters.AddValueWith("@tech_email",txt_tech_email.text) 
      .Parameters.AddValueWith("@tech_rol",txt_tech_role.selectValue.tostring) 
      .ExecuteNonQuery() 
     End With 
     MessageBox.Show(msg, "INSERT", MessageBoxButtons.OK, MessageBoxIcon.Information) 
    Catch ex As Exception 
     MessageBox.Show(ex.Message.ToString, ". : : ERROR : : .", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    Finally 
     If cn IsNot Nothing AndAlso cn.State <> ConnectionState.Closed Then 
      cn.Close() 
      cn = Nothing 
     End If 
    End Try 
End Sub 

Потому что у меня есть модуль, который отделен от основного кода, я не могу вызывать текстовые поля, потому что они отделены от основного модуля ... любая идея о том, как это сделать? ... Dont трудно .. Это моя 14 неделя работы с VB ..:/

ответ

0

Добавить к параметру Insert функции для SqlParameters

Public Sub Insert(query As String, msg As String, params As SqlParameter()) 
    Dim cn As New SqlConnection(cs) 
    Dim cmd As New SqlCommand 
    Try 
     cn.Open() 
     With cmd 
      .CommandType = CommandType.Text 
      .CommandText = query 
      .Connection = cn 
      If params IsNot Nothing AndAlso params.Count > 0 Then 
       .Parameters.AddRange(params) 
      End If 
      .ExecuteNonQuery() 
     End With 
     MessageBox.Show(msg, 
         "INSERT", 
         MessageBoxButtons.OK, 
         MessageBoxIcon.Information) 
    Catch ex As Exception 
     MessageBox.Show(ex.Message.ToString, ". : : ERROR : : .", 
         MessageBoxButtons.OK, 
         MessageBoxIcon.Error) 
    Finally 
     If cn IsNot Nothing AndAlso cn.State <> ConnectionState.Closed Then 
      cn.Close() 
      cn = Nothing 
     End If 
    End Try 
End Sub 

Затем использовать его как это:

Dim query As String = "INSERT INTO Technician (tec_name, tec_email, rol_id) VALUES (@tech_name, @tech_email, @tech_role)" 
Dim msg As String = "Technican Add Correct" 
Dim params As SqlParameter() = {New SqlParameter("@tech_name",txt_tech_name.text), 
           New SqlParameter("@tech_email",txt_tech_email.text), 
           New SqlParameter("@tech_rol",txt_tech_role.selectValue.tostring)} 

Procedures.Insert(query, msg, params) 

используя массив SqlParameter даст вам возможность использования такой же функции с типом параметра другой, то string

+0

Большое спасибо Fabio. меня устраивает ! – hbrtxito

0

Вы можете иметь его таким образом ... это работает для меня.

 String query = "INSERT INTO Technician(tec_name, tec_email, rol_id) VALUES(@tech_name, @tech_email, @tech_rolr)" 
     params = {"tech_name", "tech_email", "tech_rolr"} 
     values = {"" & txt_tech_name.text, "" & txt_tech_email.text, "" & txt_tech_role.selectValue.tostring()} 

     SaveUpdateDelete(query, params, values) 

под модулем, вы можете поместить этот

Public params() As String 
    Public values() As String 

    Public Sub SaveUpdateDelete(ByVal sql As String, ByVal parameters() As String, ByVal Values() As String) 
     If con.State = ConnectionState.Open Then 
      con.Close() 
     End If 
     con.Open() 
     command = New MySqlCommand(sql, con) 

     For i = 0 To parameters.Count - 1 
      command.Parameters.AddWithValue("@" & parameters(i).ToString, Values(i)) 
     Next 
     command.CommandText = sql 
     command.ExecuteNonQuery() 

     con.Close() 
    End Sub 

SaveUpdateDelete метод применим для добавления, обновление и удаление данных .. ваш код будет отличаться только в запросе .. . "insert, update, delete"