これは、ストアド プロシージャで行う必要があります。これにより、基本的にクエリがフォーマットされて保存されます。コードから渡されるパラメーターを設定し、結果を読み取ります。
例:
C# メソッド:
private void SetNote()
{
const string sql = "sp_SelectControllerNoteByID";
using (var conn = MocSystem.GetMocDbConnection())
{
using (var comm = new SqlCommand(sql, conn))
{
comm.CommandType = CommandType.StoredProcedure;
comm.Parameters.Add(new SqlParameter("@ControllerNoteID", ControllerNoteId));
try
{
conn.Open();
using (var rdr = comm.ExecuteReader())
{
while (rdr.Read())
{
CommentText = rdr["NoteText"].ToString();
_commentor = new User(new Guid(rdr["NoteAuthor"].ToString()));
CommentDate = (DateTime)rdr["NoteDate"];
MocRequestId = (int)rdr["MocRequestID"];
}
}
}
catch (Exception ex)
{
HasError = true;
ErrorMessage += "\nThere was a problem building the note: " + ex.Message;
}
}
}
}
DBMS 上のストアド プロシージャ (この例では SQL サーバー):
ALTER proc [dbo].[sp_SelectControllerNoteByID]
@ControllerNoteID int
AS
SELECT
ControllerNoteID,
NoteText,
NoteDate,
NoteAuthor,
MocRequestID
FROM
ControllerNotes
WHERE
ControllerNoteID = @ControllerNoteID
ここではストアド プロシージャを呼び出しますが、この場合は単純な select ステートメントであり、ADO を介してオブジェクトに読み込みます。これで、再コンパイルせずにクエリを変更できます。パラメータを追加しない限り、その場合はコード内のパラメータも更新する必要があります。