2014-01-29 1 views
1

У меня есть две таблицы, которые являются назначением и медицинским центром, которые имеют отношения друг с другом с использованием mcID. Для моей формы назначения я заполняю раскрывающийся список, чтобы отобразить поле McCentre таблицы medicalcentre. И то, что я хочу сделать, состоит в том, чтобы, основываясь на том, что пользователь выбирает для McCentre в раскрывающемся списке, и отправьте форму, соответствующий номер mcID в таблице MedicalCentre будет вставлен в таблицу назначения. и т. д. Если я выберу семейную клинику Sliver Cross и отправлю форму, таблица встреч войдет в новую запись mcID 4. Поскольку на основе таблицы медицинского центра, клиника кросс-семейной клиники относится к mcID 4.На основании того, какое значение пользователь выбирает для раскрывающегося списка, вставьте этот идентификатор этого значения в таблицу

Для следующих кодов, которые Я отправил. После выбора mcCentre (Hwang & Liang Family Clinic) и нажав кнопку регистрации, я получил (преобразование не удалось при преобразовании значения nvarchar «Hwang & Liang Family Clinic» в тип данных int.) Помощь?

НАЗНАЧЕНИЕ ФОРМЫ

enter image description here

Назначение и MEDICALCENTRE ТАБЛИЦА enter image description here

Ошибка следующего hutchonoid кода

enter image description here

Ошибка следующий hutchonoid код 2

enter image description here

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Web.Security; 
using System.Web.UI.HtmlControls; 
using System.Data; 

public partial class appointment : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      string constr = ConfigurationManager.ConnectionStrings["sacpConnectionString"].ToString(); // connection string 
      SqlConnection con = new SqlConnection(constr); 
      con.Open(); 

      //SqlCommand com = new SqlCommand("select * from MEDICALCENTRE", con); // table name 
      SqlCommand com = new SqlCommand("select mcCentre from MEDICALCENTRE", con); // table name 
      SqlDataAdapter da = new SqlDataAdapter(com); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); // fill dataset 
      //ddlMedicalCentre.DataTextField = ds.Tables[0].Columns["mcID"].ToString(); // text field name of table dispalyed in dropdown 
      //ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcID"].ToString();    // to retrive specific textfield name 
      ddlMedicalCentre.DataTextField = ds.Tables[0].Columns["mcCentre"].ToString(); // text field name of table dispalyed in dropdown 
      ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcCentre"].ToString();    // to retrive specific textfield name 
      ddlMedicalCentre.DataSource = ds.Tables[0];  //assigning datasource to the dropdownlist 
      ddlMedicalCentre.DataBind(); //binding dropdownlist 
     } 
    } 
    protected void btnCreate_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["sacpConnectionString"].ConnectionString)) 
      { 
       try 
       { 
        int ID = Convert.ToInt32(Session["ID"].ToString()); 
        SqlCommand cmd = new SqlCommand(); 
        Guid guid; 
        guid = Guid.NewGuid(); 
        String strStatus = "waiting"; 
        string sql = "INSERT INTO appointment (aStatus,aDate, aTime, aContact, aHeight, aWeight, patientID, mcID)"; 
        sql += "VALUES (@aStatus, @aDate, @aTime, @aContact, @aHeight, @aWeight, @patientID, @mcID)"; 
        cmd.Parameters.AddWithValue("@aStatus", strStatus); 
        cmd.Parameters.AddWithValue("@aDate", txtDate.Value); 
        cmd.Parameters.AddWithValue("@aTime", txtTime.Value); 
        cmd.Parameters.AddWithValue("@aContact", txtContact.Value.Trim()); 
        cmd.Parameters.AddWithValue("@aHeight", txtHeight.Value.Trim()); 
        cmd.Parameters.AddWithValue("@aWeight", txtWeight.Value.Trim()); 
        cmd.Parameters.AddWithValue("@patientID", ID); 
        cmd.Parameters.AddWithValue("@mcID", Convert.ToInt16(ddlMedicalCentre.SelectedValue.Trim())); 

        cmd.Connection = con; 
        cmd.CommandText = sql; 
        con.Open(); 

        cmd.ExecuteNonQuery(); 

        // Session.Add("Username", txtFirstName.Value); 
        // Session.Add("Password", txtContact.Value); 
        // FormsAuthentication.SetAuthCookie(txtFirstName.Value, true); 
        Response.Redirect("../index.aspx"); 

       } 

       finally 
       { 
        con.Close(); 
       } 
      } 
     } 
    } 
} 
+0

Это выглядит хорошо для меня на первый взгляд. Есть ли ошибки? – hutchonoid

+0

После выбора mcCentre (семейная клиника Hwang & Liang) и нажав кнопку регистрации, я получил (преобразование не удалось при преобразовании значения nvarchar «Семейная клиника Hwang & Liang» в тип данных int.) @hutchonoid – Pony

ответ

1

Вы должны преобразовать выбранное значение из string к Int.

Это возвращает строку:

ddlMedicalCentre.SelectedValue.Trim() 

И оператор ожидает Int.

Это позволит устранить проблему:

cmd.Parameters.AddWithValue("@mcID", Convert.ToInt16(ddlMedicalCentre.SelectedValue.Trim())); 

Update

Вы должны убедиться, что ваш выпадающий список использует Id в качестве значения, как это:

ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcId"].ToString(); 

и не, который устанавливает текст в значение:

ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcCentre"].ToString(); 

Вы должны оставить DataTextField, как показано на рисунке.

Обновление 2

копию этого в новый метод, т.е.

private void BindMedicalDropdowns() 
     { 

      string constr = ConfigurationManager.ConnectionStrings["sacpConnectionString"].ToString(); // connection string 
      SqlConnection con = new SqlConnection(constr); 
      con.Open(); 

      //SqlCommand com = new SqlCommand("select * from MEDICALCENTRE", con); // table name 
      SqlCommand com = new SqlCommand("select mcCentre from MEDICALCENTRE", con); // table name 
      SqlDataAdapter da = new SqlDataAdapter(com); 
      DataSet ds = new DataSet(); 
      da.Fill(ds); // fill dataset 
      //ddlMedicalCentre.DataTextField = ds.Tables[0].Columns["mcID"].ToString(); // text field name of table dispalyed in dropdown 
      //ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcID"].ToString();    // to retrive specific textfield name 
      ddlMedicalCentre.DataTextField = ds.Tables[0].Columns["mcCentre"].ToString(); // text field name of table dispalyed in dropdown 
      ddlMedicalCentre.DataValueField = ds.Tables[0].Columns["mcCentre"].ToString();    // to retrive specific textfield name 
      ddlMedicalCentre.DataSource = ds.Tables[0];  //assigning datasource to the dropdownlist 
      ddlMedicalCentre.DataBind(); //binding dropdownlist 
     } 

Затем переместите его из! IsPostBack пункта поэтому он получает повторно переплет на постбэк тоже.

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindMedicalDropdowns(); 
    if (!Page.IsPostBack) 
    { 

    } 
} 

Update 3

В строке 32, ваш оператор выбора должен быть таким, он отсутствует mcID поле:

select mcId, mcCentre from MEDICALCENTRE 
+0

Теперь у меня этот человек. Строка ввода не была в правильном формате. @hutchonoid – Pony

+0

Что такое SQL, как до выполнения? Можете ли вы добавить его на свой вопрос, чтобы я мог взглянуть? – hutchonoid

+0

U означает мои обновленные коды? я отредактировал выше и добавлю изображение. Я сейчас пойду, я вернусь позже, чтобы проверить, спасибо человеку. @hutchonoid. – Pony