コマンド使用時に動作する置換機能
exec MyStoredProcedure param1, param2,
など... しかし、C# コードで実行すると、テキストが適切に置き換えられないため、実際のコメントではなく @@Comments というメールが届きます。SQL Server 2008 で確認しようとしましたが、正常に動作し、電子メールも正常に送信されます。確認する必要があることはありますか?
ここに私のC#コードがあります:
public static void SetRequestStatusChange(int reqID, int newStatus, string assignTo)
{
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("spUpdateRequest", con);
cmd.CommandType = CommandType.StoredProcedure;
// Status
cmd.Parameters.Add(new SqlParameter("@RequestNo", SqlDbType.Int, 4));
cmd.Parameters["@RequestNo"].Value = 276;
// Queue
cmd.Parameters.Add(new SqlParameter("@userID", SqlDbType.NVarChar, 12));
cmd.Parameters["@userID"].Value = "1091912";
// State
cmd.Parameters.Add(new SqlParameter("@RequestStatus", SqlDbType.Int, 4));
cmd.Parameters["@RequestStatus"].Value = 2;
// Buyer Emp ID
cmd.Parameters.Add(new SqlParameter("@assignedTo", SqlDbType.NVarChar, 12));
cmd.Parameters["@assignedTo"].Value = "1091912";
try
{
con.Open();
cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
throw new ApplicationException("Data Error." + err.ToString());
}
finally
{
//close the connection
con.Close();
}
}
これは、実際に置換を実行するストアド プロシージャの一部です。実際のストアド プロシージャは非常に長く、他の多くのストアド プロシージャを呼び出します (私は書きませんでした)。
select @html = replace(replace(replace(@html, '@@COMMENTS', case when @activityID <> 20 then 'The following comments were noted when the Request' else '' end +
case @ActivityID when 2 then ' was submitted: ' + case when requestorComments > '' then requestorComments else 'None' end
when 0 then ''
when 4 then ' was edited: ' + isnull(L.Comments, 'None')
when 15 then ' was edited: ' + isnull(LL.Comments, 'None')
when 20 then ''
when 21 then ' material was returned: ' + case when dbo.fnLastComment(lamSpecRecallComments) > '' then replace(dbo.fnLastComment(lamSpecRecallComments),':',': ') else 'None' end
when -21 then ' material was returned: ' + case when dbo.fnLastComment(lamSpecRecallComments) > '' then replace(dbo.fnLastComment(lamSpecRecallComments),':',': ') else 'None' end
when 8 then ' was approved: ' + case when ccMgrCOmments > '' then ccMgrCOmments else 'None' end
when 9 then ' was approved: ' + case when lamAprCOmments > '' then lamAprCOmments else 'None' end
when 13 then ' was stored: ' + case when dbo.fnLastComment(lamSpecCOmments) > '' then dbo.fnLastComment(lamSpecCOmments) else 'None' end
when -8 then ' was closed: ' + case when ccMgrCOmments > '' then ccMgrCOmments else 'None' end
when -9 then ' was closed: ' + case when lamAprCOmments > '' then lamAprCOmments else 'None' end
else '' end),
'@@PLEASE',
case when @activityID = 8 or @activityID = 9 or @activityID = 20 or @activityID = 2 then 'Please click the link below to view the Request and ensure it is worked expeditiously.'
else '' end),'@@RECALL',@list)
from (select * from strgRequests where requestNumber = @requestID) r
left join (select * from ActivityLog where TransactionID = @transactionID) L on 1 = 1
left join (select * from ActivityLineItemLog where TransactionID = @transactionID) LL on 1 = 1
@@コメント、@@RECALL、@@テーブルから来てください。これにより、メールをカスタマイズできます。