私はSQL Prepared Statement関数に使用しているクラスを作成しました。クラスは、私はその後、SQLデータベースにデータを挿入するために別の関数に変数を渡すために、このコードを使用し、パラメータVB.Netクラス/メソッドの改良
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
を作成するには、このコードを持っている
Public Class _SQLParameter
Public Name As String
Public Length As Int16
Public Value As Object
End Class
です。
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)
My関数は、データベース名、テーブル名、および渡されたリスト変数を使用して、プリペアドステートメントを作成し、NonQueryを実行します。これはうまくいく。
すべてのコードは機能しますが、私のコードを改善する方法を知りたいのは、恐ろしいことです。私は.NETの専門家ではありませんが、取得するのに十分なことができます。あなたが私にそれを改善する方法に関するいくつかの提案を与えることができるなら、それは素晴らしいだろう。
おかげ
編集....
私はプリペアドステートメントを作成し、それを実行するために、このサブ・ルーチンを使用しています。私はそれを作って、私が持っているINSERTステートメントにそれを再利用することができます。
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
.NETはすでにこの機能を提供しているので、最初はこのコードがあります。 – David
利用可能なオーバーロードの一部を使用する場合、ヘルパークラスなしでパラメータを直接作成して追加することができます: 'cmd.Parameters.Add(param、dbType、size).Value = typedValue'。 "ヘルパー"クラスは直接行うよりも多くの作業になります。 – Plutonix
'this code to ... Insert Data'単一のテーブルの場合、INSERT、SELECT、DELETE、UPDATEコマンドを「記憶」し、基本となるデータテーブルに対して簡単に「更新」を発行するようDataAdapterを設定できます。完全に構成されたDAには他にも多くの利点と機能があります。 – Plutonix