レコードをデータベースに送信するカスタム Web サービスがあります。
テーブルに送信される JF_ID 値は、メイン/ソース テーブルの JF_ID 値を参照します。そのため、ユーザーが存在しない JF_ID を送信しようとすると、「参照整合性違反など」という SQL 例外がキャッチされます。
私のWebサービスは次のようになります。
[WebService(Namespace = "http://microsoft.com/webservices/")]
class POReqEntryForm : WebService
{
[WebMethod(Description = "Submits data to [Req_entry].")]
public void AddRecordPOReqIdEntry(int JF_ID, int ReqId, string PONum, string POLineNum, float POAmount, string Submitter, string DateSubmitted)
{
string connectionString =
ConfigurationManager.ConnectionStrings["REQdb"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = "INSERT INTO [REQdb].[dbo].[Req_entry] "
+ "(JF_ID, Req_id, Po_num, Po_line_num, po_amount, Submitter, Date_Submitted ) "
+ "VALUES (@JF_ID, @ReqId, @PONum, @POLineNum, @POAmount, @Submitter, @DateSubmitted)";
cmd.Parameters.AddWithValue("JF_ID", JF_ID);
cmd.Parameters.AddWithValue("ReqId", ReqId);
cmd.Parameters.AddWithValue("PONum", PONum);
cmd.Parameters.AddWithValue("POLineNum", POLineNum);
cmd.Parameters.AddWithValue("POAmount", POAmount);
cmd.Parameters.AddWithValue("Submitter", Submitter);
cmd.Parameters.AddWithValue("DateSubmitted", DateSubmitted);
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch
{
// Handle the error using your own preferred error-handling method
}
finally
{
conn.Close();
}
}
}
}
ユーザーによる多数の障害データ エントリが存在する可能性があります。たとえば、ユーザーが整数値ではなく文字列を入力した場合、存在しない JF_ID のエントリを送信しようとすると、参照整合性に違反します。
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Req_Entry_JF_ID". The conflict occurred in database "REQdb", table "dbo.Main_Form", column 'JF_ID'.
このようなタイプの SQL 例外がキャッチされたときに、ユーザー フレンドリーなカスタム エラー メッセージ (入力された ID が存在しません。データの挿入に失敗しました!) が Web サービスから渡されるようにするにはどうすればよいですか。最後に、この分かりやすいエラー メッセージを InfoPath クライアントに渡したいと思います。
どうもありがとう。