現在、すべてのデータベースからすべてのsprocsを返し、正しいパラメータの型と名前をSqlCommand
オブジェクトに追加して1つの巨大クラスに戻すことで、クラスをApp_Code
に生成します。これは、呼び出しを行うたびに相対的なデータ型でパラメータを追加することなく、ストアドプロシージャのパラメータをSqlCommand
に渡すときにMyCmd.cmd.Parameters("MyParam").Value = "whatever"
のようなことができることを意味します。また、sprocが単に文字列であるため、各sprocの公開されたパラメータを参照する必要があることも意味します。それはイントラネット/インターネットアプリケーションを意味するだろうとして、本当に、これは望ましくないVB.NETでストアドプロシージャの解決を強く指定する
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Param", 3, 10, 1, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
:あなたはこれを行う必要があるだろうSPROCをに対処したいすべてのパラメータのために、大局的にそれを置くために
非常に単純なタスクを達成するために、コード行を爆発させるでしょう。
これを強く型付けすることで、代わりにMyDatabase.MySproc.MyParam("value")
のような方法でリファクタリングする方法を検討しています。残念ながら、これは私たちのApp_Code
フォルダーが、そのような大量のコードが必要となるため、既にサイズの2倍になっていることを意味します。
私は私が何を意味するかの簡単な例を書いた:
Public Class MyProc
Dim cmd As SqlCommand
Public Sub New()
' uses the ConfigurationManager to get the connection string for a certain DB'
Dim cmd As New SqlCommand("MyProc", GetSqlConnection())
End Sub
Public Sub Param1(ByVal param As String)
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Param1", 3, 10, 1, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
cmd.Parameters("Param1").Value = param
End Sub
Public Sub Param2(ByVal param As String)
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Param2", 22, 7000, 1, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
cmd.Parameters("Param1").Value = param
End Sub
Public Sub Param3(ByVal param As String)
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@Param3", 3, 1, 1, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
cmd.Parameters("Param3").Value = param
End Sub
Public Function GetReturnValue() As String
cmd.Parameters.Add(New System.Data.SqlClient.SqlParameter("@RETURN_VALUE", 8, 0, 6, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
Return cmd.Parameters("RETURN_VALUE").Value
End Function
End Class
は、私たちが気づいていないこと、これを行うために有することに選択肢はありますか?これは、インター/イントラネットアプリケーションを開発する多くの企業に共通の問題であると確信しています。
パラメータは実行時にLINQを使用して派生していますか? – Kezzer
LINQ ORMは、コンパイル時にデータコンテキスト生成時にパラメータを推論し、それらを表す強力な型付きのメソッドを作成します。 –
手書きLINQ to SQL関数を選択しましたが、これは可変的に同じです。 – Kezzer