我有一个将记录提交到数据库的自定义 Web 服务,
提交给表的 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 异常时,从我的 Web 服务传递用户友好的自定义错误消息(例如输入的 ID 不存在。数据插入失败!)。最后,我想将此友好的错误消息传递给 InfoPath 客户端。
非常感谢。