Case Study – Trauma Flow Database

Case Study – Trauma Flow Database

Shown here are assignments and lectures that use the Trauma Flow Database. This is a full case study of a complete web system developed during the Summer 2012 offering of COP4834.

Database Procedure to Update the Trauma Form

ALTER PROCEDURE [dbo].[sp_UpdateForm] (
  @TraumaFormID INT,
  @PatientName VARCHAR(200) = NULL,
  @TimeOfArrival VARCHAR(30) = NULL,
  @Age VARCHAR(10) = NULL,
  @DateOfArrival VARCHAR(50) = NULL,
  @Allergies VARCHAR(200) = NULL,
  @Meds VARCHAR(200) = NULL,
  @ModeOfArrival INT = NULL,
  @EvacUnit VARCHAR(50) = NULL,
  @PMH VARCHAR(200) = NULL)
AS
BEGIN
 
UPDATE TraumaForm
 SET name = @PatientName
 WHERE id = @TraumaFormID     
-- sp_InsertMedicaldata
-- Arg 1 - The Form ID
-- Arg 2 - The XML String identifying the data.
-- Arg 3 - CodeID if this is data from a code (drop down)
-- Arg 4 - ValueText if this is User Entered Data
EXEC sp_InsertMedicalData @TraumaFormID, 'TimeOfArrival', NULL, @TimeOfArrival
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientCurrentAge', NULL, @Age
EXEC sp_InsertMedicalData @TraumaFormID, 'DateOfArrival', NULL, @DateOfArrival
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientReportedAllergies', NULL, @Allergies
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientReportedMedications', NULL, @Meds
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientModeOfArrival', @ModeOfArrival, NULL
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientTransportEvacUnit', NULL, @EvacUnit
EXEC sp_InsertMedicalData @TraumaFormID, 'PatientPreviousMedicalHistory', NULL, @PMH
END  

Database Procedure used to Insert Data

ALTER PROCEDURE [dbo].[sp_InsertMedicalData] (
  @TraumaFormID INT,
  @NameText VARCHAR(200),
  @CodeID INT = NULL,
  @ValueText VARCHAR(MAX) = NULL
)
AS
BEGIN 

DECLARE @CategoryID INT
EXEC @CategoryID = dbo.func_GetCategoryID @CategoryText = @NameText

-- N determines if data exists in database
DECLARE @N INT
SELECT @N = COUNT(*) FROM MedicalData
       WHERE TraumaFormID = @TraumaFormID
       AND CategoryID = @CategoryID

-- If data does not exist in database insert data
IF (@N = 0)
BEGIN
 INSERT INTO MedicalData
  (TraumaFormID, CategoryID, TakenDateTime, CodeID, ValueText)
 VALUES
  (@TraumaFormID, @CategoryID, GETDATE(), @CodeID, @ValueText)
END

-- If n does exist then update it
IF (@N != 0) AND (@TraumaFormID != 0)
BEGIN
UPDATE MedicalData
 SET   CodeID = @CodeID,
       ValueText = @ValueText     
       WHERE TraumaFormID = @TraumaFormID
       AND CategoryID = @CategoryID
END 
END
GO 

C# File for TraumaFowHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Data;
namespace TraumaFlow.Code
{
    public class TraumaFlowHelper
    {
        public static string connectionName = "TraumaFlowConnectionString";
        public static string getConnectionString()
        {
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.getConnectionString(connectionName);
        }
        public static void fillTextBox(TextBox tb, string XMLName, int TraumaFormID)
        {
            tb.Text = getValue(XMLName, TraumaFormID);
        }
        public static string getValue(string XMLName, int TraumaFormID)
        {
            if (XMLName == "PatientReportedName") return TraumaFlowHelper.getPatientName(TraumaFormID);
            string sql = "SELECT Value FROM view_TextMedicalData ";
            sql += "WHERE XMLName = '" + XMLName + "'";
            sql += " AND id = " + Convert.ToString(TraumaFormID);
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnString(sql);
        }
        public static string getPatientName(int TraumaFormID)
        {
            string sql = "SELECT name FROM TraumaForm WHERE id = '" + TraumaFormID.ToString() + "'";
            
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnString(sql);
        }
        public static string getTraumaFormDate(int TraumaFormID)
        {
            string sql = "SELECT Arrival FROM TraumaForm WHERE id = '" + TraumaFormID.ToString() + "'";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnString(sql);
        }
        public static int getCodeID(string XMLName, int TraumaFormID)
        {
            string sql = "SELECT CodeID FROM view_CodedMedicalData ";
            sql += "WHERE XMLName = '" + XMLName + "'";
            sql += " AND id = " + Convert.ToString(TraumaFormID);
            try
            {
                DatabaseHelper dh = new DatabaseHelper(connectionName);
                return Convert.ToInt32(dh.executeSqlReturnString(sql)); 
            }
            catch
            { 
                return 0; 
            }
        }
        public static DataTable matchStaffNames(string pattern)
        {
            string sql = "SELECT StaffName FROM StaffNames WHERE UPPER(StaffName) LIKE '%" + pattern.ToUpper() + "%'";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnDataTable(sql);
        }
        public static DataTable getAllXMLNames()
        {
            string sql = "SELECT DISTINCT(NameText) FROM NameResolution";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnDataTable(sql);
        }
        public static string[] traumaTeamMembers()
        {
            string[] s = {"TRAUMA_A_NURSE","RUNNER","LAB_TECH","ED_MD","TRAUMA_B_NURSE","OR_NURSE_TECH", 
                          "RADIOLOGY_TECH", "ORTHO_TECH", "SCRIBE", "RESP_THERAPY", "CHAPLAIN", "OTHER"};
            return s;
        }
        public static void insertMedicalData(string nameText, string value)
        {
            // stored procedure has logic for insert OR update
            updateMedicalData(0, nameText, value);
        }
        public static void updateMedicalData(int traumaFormID, string nameText, string value)
        {
            if (doesMedicalDataExist(traumaFormID, nameText, value)) return;
            string sql = "EXEC [sp_InsertMedicalData] " + Convert.ToString(traumaFormID) + ", '" + nameText + "', NULL , '" + value + "'";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            dh.executeSqlNonQuery(sql);
        }
        public static bool doesMedicalDataExist(int traumaFormID, string nameText, string value)
        {
            string categoryID = getCategoryIDFromNameText(nameText);
            string sql = "SELECT COUNT(*) FROM MedicalData WHERE TraumaFormID = " + Convert.ToString(traumaFormID);
            sql += " AND CategoryID = " + getCategoryIDFromNameText(nameText);
            sql += " AND ValueText = '" + value + "'";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            int c = dh.executeSqlReturnInt(sql);
            return (c >= 1);
        }
        public static string getCategoryIDFromNameText(string nameText)
        {
            string sql = "SELECT CategoryID FROM NameResolution WHERE NameText = '" + nameText +"'";
            DatabaseHelper dh = new DatabaseHelper(connectionName);
            return dh.executeSqlReturnString(sql);
        }
    }
}

DisplayTraumaForms.aspx – code file

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DisplayTraumaForms.aspx.cs" Inherits="TraumaFlow.InputForms.DisplayTraumaForms" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Select Trauma Form to Edit</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <h1>Select Current Trauma Form to Edit</h1>
        <asp:Label ID="lblCurrent" runat="server" Text=""></asp:Label>
        <br />
        <asp:GridView ID="gvForms" runat="server" AutoGenerateColumns="False" 
            CellPadding="4" DataKeyNames="id" DataSourceID="SqlDataSource1" 
            EnableModelValidation="True" ForeColor="#333333" GridLines="None" OnRowCommand="gvForms_OnRowCommand">
            <AlternatingRowStyle BackColor="White" />
            <Columns>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="name" HeaderText="name" SortExpression="name" />
                <asp:BoundField DataField="Arrival" HeaderText="Arrival" 
                    SortExpression="Arrival" />
                <asp:TemplateField HeaderText="Edit">
                <ItemTemplate>
                    <asp:LinkButton ID="lbEdit" runat="server" CommandName="EditPatient" CommandArgument='<%#Eval("id") %>'>Edit This Patient</asp:LinkButton> | 
                    <asp:LinkButton ID="lbData" runat="server" CommandName="EditData" CommandArgument='<%#Eval("id") %>'>Edit Form Data</asp:LinkButton>
                </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
            <RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
            <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
        </asp:GridView>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:TraumaFlowConnectionString %>" 
            SelectCommand="SELECT * FROM [TraumaForm]"></asp:SqlDataSource>
        <br />
        <br />
        <asp:HyperLink ID="HyperLink1" runat="server" 
            NavigateUrl="~/InputForms/CreateTraumaFlow.aspx">Create New Trauma Flow</asp:HyperLink>
    </div>
    </form>
</body>
</html>

Associated Code-behind DisplayTraumaForms.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TraumaFlow.InputForms
{
    public partial class DisplayTraumaForms : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            { lblCurrent.Text = "Current Trauma Form ID: " + Convert.ToString(Session["TraumaFormID"]); }
            catch
            { lblCurrent.Text = "No Current Trauma Form  "; }

        }

        protected void gvForms_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "EditPatient")
            {
                int TraumaFormID = Convert.ToInt32(e.CommandArgument);
                Session.Add("TraumaFormID", TraumaFormID);
                Response.Redirect("CreateTraumaFlow.aspx");
            }

            if (e.CommandName == "EditData")
            {
                int TraumaFormID = Convert.ToInt32(e.CommandArgument);
                Session.Add("TraumaFormID", TraumaFormID);
                Response.Redirect("TabbedEntryBasicInfo.aspx");
            }
        }
    }
}