У меня есть пользовательский веб-сервис, который отправляет запись в базу данных,
Значение JF_ID, которое отправляется в таблицу, ссылается на значение JF_ID основной/исходной таблицы. Поэтому, если пользователь пытается отправить несуществующий JF_ID, исключение sql перехватывается, говоря: «нарушение ссылочной целостности и т. д.».
Вот как выглядит мой веб-сервис:
[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 из моей веб-службы передается удобное пользовательское сообщение об ошибке (например, введенный идентификатор не существует. Ошибка вставки данных!) В конце концов, я хотел бы передать это понятное сообщение об ошибке клиенту InfoPath.
Большое спасибо.