2016-04-11 27 views
0

SQL Hazır Bildirimi İşlevi için kullanıyorum bir sınıf yaptım. Sınıf I, sonra SQL veritabanına veri ekleme için başka işleve değişkenleri geçmek için bu kodu kullanmak parametresiniVB.Net Sınıf/Yöntem iyileştirme

Public Function MakeMyParameter(ByVal strName As String, ByVal intLength As Integer, ByVal objValue As Object) As _SQLParameter 
    Dim param As New _SQLParameter 
    param.Name = strName 
    param.Length = intLength 
    param.Value = objValue 
    Return param 
End Function 

oluşturmak için bu kodu var

Public Class _SQLParameter 
    Public Name As String 
    Public Length As Int16 
    Public Value As Object 
End Class 

olduğunu.

Dim MyDatabaseName as "MyDatabase" 
    Dim MyTableName as "Password" 
    Dim MyVariableList As New List(Of _SQLParameter) 
    MyVariableList.Add(MakeMyParameter("Password",0,varbytePassword)) 
    MyVariableList.Add(MakeMyParameter("DateTimeChanged",0,DateTime.Now())) 
    _SQLPreparedInsertStatement(MyDatabaseName, MyTableName, MyVariableList) 

Benim işlevi daha sonra veritabanı adını, masa adı ve NonQuery hazırlanmış deyimi oluşturmak ve yürütmek geçirilen liste değişkeni kullanır. Bu iyi çalışıyor.

Tüm kod çalışır ancak kodumu nasıl geliştireceğimi bilmek istiyorum çünkü bana göre korkunç görünüyor. .NET konusunda uzman değilim, ancak almak için yeterince yapabilirim. Bana nasıl geliştirileceği konusunda bazı önerilerde bulunursanız harika olur.

Teşekkür

Düzenleme ....

Ben Hazırlanan Beyanı oluşturmak ve çalıştırmak için bu alt rutini kullanın. Bunu yaptım, böylece sahip olduğum herhangi bir INSERT bildirimi için yeniden kullanabilirim.

Public Sub _SQLPreparedInsertStatement(ByVal _SQLDatabaseName As String, ByVal _SQLTableName As String, _SQLParameters As List(Of _SQLParameter)) 
    Dim _ColumnNames As String = "" 
    Dim _Parameters As String = "" 

    Dim _SQLInsertCommand As New SqlCommand() 
    _SQLInsertCommand.CommandType = CommandType.Text 


    Try 
     Using _SQLConnection As New SqlConnection(_varstrSQLLocalDBConnectionString) 
      Try 
       _SQLConnection.Open() 
       _SQLInsertCommand.Connection = _SQLConnection 
      Catch ex As Exception 
       MessageBox.Show("Error - " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 

      For Each param As _SQLParameter In _SQLParameters 
       _ColumnNames = _ColumnNames & param.Name & "," 
       _Parameters = _Parameters & "@" & param.Name & "," 
       If TypeOf param.Value Is Byte() Then 
        _SQLInsertCommand.Parameters.Add("@" & param.Name, SqlDbType.VarBinary, param.Length).Value = param.Value 
       ElseIf TypeOf param.Value Is String Then 
        _SQLInsertCommand.Parameters.Add("@" & param.Name, SqlDbType.VarChar, param.Length).Value = param.Value 
       ElseIf TypeOf param.Value Is Integer Then 
        _SQLInsertCommand.Parameters.Add("@" & param.Name, SqlDbType.Int, param.Length).Value = param.Value 
       ElseIf TypeOf param.Value Is DateTime Then 
        _SQLInsertCommand.Parameters.Add("@" & param.Name, SqlDbType.DateTime, 0).Value = param.Value 
       End If 
      Next 
      'remove comma from the end of the variables 
      _ColumnNames = _ColumnNames.TrimEnd(",") 
      _Parameters = _Parameters.TrimEnd(",") 

      Try 
       _SQLInsertCommand.CommandText = "USE " & _SQLDatabaseName & "; INSERT INTO " & _SQLTableName & " (" & _ColumnNames & ") VALUES (" & _Parameters & ")" 

       _SQLInsertCommand.ExecuteNonQuery() 

      Catch ex As Exception 
       MessageBox.Show("An error has occurred executing a SQL command - " & ex.Message & Environment.NewLine & "Query - " & _SQLInsertCommand.CommandText, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
      End Try 
     End Using 
    Catch ex As Exception 
     MessageBox.Show("Some Error. Most unexpected") 
    End Try 
End Sub 
+2

Sanırım bu gerçekten açık değil * neden * bu kodun ilk olarak var, çünkü .NET zaten bu işlevselliği sağlıyor. – David

+1

Kullanılabilir aşırı yüklenmelerden bazılarını kullanırsanız, bir yardımcı sınıfı olmadan doğrudan bir parametre oluşturabilir ve ekleyebilirsiniz: 'cmd.Parameters.Add (param, dbType, boyut) .Value = typedValue'. "Yardımcı" sınıfı, bunu doğrudan yapmaktan daha çok iş yapar. – Plutonix

+0

'Bu kod ... Veri Ekle 'Tek tablolarda DataAdapter öğesini, INSERT, SELECT, DELETE ve UPDATE komutlarını ve temel sorun olan' Update's temelli '' hatırla '' olarak yapılandırabilirsiniz. Tamamen yapılandırılmış bir DA diğer birçok avantaj ve özelliklere de sahiptir. – Plutonix

cevap

0

.NET zaten sizin için bunu yapar. İşte aradığınız kavramların tam bir örneğidir ..

Imports System.Data.SqlClient 
Module Module1 
    Sub Main() 
     Using connection As New SqlConnection("Server=SERVERNAME;Database=DATABASENAME;uid=USERNAME;pwd=PASSWORD") 
      connection.Open() 
      Using cmd As SqlCommand = connection.CreateCommand 
       With cmd 
        .CommandType = CommandType.Text 
        .CommandText = "UPDATE SomeTable SET [email protected] WHERE [email protected]" 
        With .Parameters 
         .AddWithValue("@OldValue", "smith") 
         .AddWithValue("@NewValue", "jones") 
        End With 
        .ExecuteNonQuery() 
       End With 
      End Using 
     End Using 
    End Sub 
End Module 
+0

Örnek için teşekkürler. Bunun mümkün olduğunu anlıyorum ve bunu zaten kullanıyorum. Tek bir işlev yazmayı denedim, böylece her bir varyasyon için bir altprogramı yeniden yazmak zorunda kalmadan farklı INSERT deyimleri için yeniden kullanabilirim. Aşağıdaki cevaba bakınız – user3771860

+0

Eski sistemlere, önerdiğinize benzer bir kodla sahip olduktan sonra, size bakım kabusunun geldiğini söyleyebilirim. Bu tür şeyler için yerleşik kalıpları kullanmanızı şiddetle tavsiye ederim. Bu tek yuvarlak delik boyunca tüm veritabanı kare mandalları sürmek için bağlama pişman olacağınız bir karardır. – DWRoelands