Попытка получить данные, а затем добавить их в строку max (преобразования строки в строку) - PullRequest
1 голос
/ 10 сентября 2011

Итак, я пытаюсь взять данные из базы данных (Patientid в формате pXX), и когда я добавляю нового пациента в базу данных через веб-сайт, он автоматически находит максимальный идентификатор пациента, а затем добавляет к нему 1. Таким образом, если максимальный идентификатор пациента равен p12, новый пациент получает значение p13.

То, что я до сих пор делал, это; изолировать два числа в строке (используя метод подстроки), преобразовать их в целое число, найти максимальное число, преобразовать обратно в строку, проверить, если длина строки меньше 2, добавить к ней 1 ноль, а затем я добавил стр. Это мой код;

    public void patientInsert()
    {
        hospitalSQLEntities db = new hospitalSQLEntities();
        int newid = 0;
        string mynumberstring = "patientid".Substring(1, 2);
        int patientid1 = Convert.ToInt32(mynumberstring);
        string p = "p";
        if (db.patients.Count() == 0)
            newid = 1;
        else
            newid = db.patients.Max(u => patientid1) + 1;
            newid = Convert.ToString(newid);
            newid = newid < 2, + "0"; 
            newid = (p + patientid1);
        patient newpatient = new patient();
        newpatient.patientid = Convert.ToString(Request.Params["newid"]);
        newpatient.doctorno = Convert.ToInt16(Request.Params["doctorno"]);
        newpatient.wardno = Request.Params["wardno"];
        newpatient.patientname = Request.Params["patientname"];
        newpatient.address = Request.Params["address"];
        newpatient.gender = Request.Params["gender"];
        newpatient.bloodtype = Request.Params["bloodtype"];
        newpatient.spam = Convert.ToBoolean(Request.Params["spam"]);
        newpatient.organs = Convert.ToBoolean(Request.Params["organs"]);
        db.AddTopatients(newpatient);
        db.SaveChanges();
    }

Я правильно делаю? Я знаю, что отключаюсь при преобразовании из int в строку и снова при добавлении 0 и p, но я просто немного растерялся.

p.s. в первый раз пытаясь программировать, так что будьте спокойны, если это глупая ошибка!

1 Ответ

0 голосов
/ 10 сентября 2011

Во-первых, вместо того, чтобы хранить Patientid как PXX, я бы просто сохранил XX (в базе данных, просто сохраните целое число. Если у них у всех есть P в начале, это будет просто проблема с отображением (показать P и любые необходимые начальные нули - только при его отображении.) Если вы сделаете это, то база данных может даже обработать нумерацию для вас (в SQL Server это называется полем IDENTITY).

Во-вторых, вот как я бы изменил ваш код - это не для того, чтобы он работал, просто чтобы показать вам некоторые ошибки

(ПРИМЕЧАНИЕ: я добавил комментарий "LOOK HERE", где были внесены изменения)

public void patientInsert()
{
    hospitalSQLEntities db = new hospitalSQLEntities();
    int newid = 0;
    //LOOK HERE: "patientid" - removed quotes (assuming patientid is a variable)
    //LOOK HERE: Substring - removed second parameter (isn't needed, and anyway, once you get higher than 100, you'll need to change your code from 2 to 3)
    string mynumberstring = patientid.Substring(1);
    int patientid1 = Convert.ToInt32(mynumberstring);
    //LOOK HERE: removed p variable (too simple - waste of space)
    //string p = "p";
    if (db.patients.Count() == 0)
    {
        newid = 1;
    }
    else
    {
        //LOOK HERE: are you trying to get the max id from the database?  if so, then this wont work. you need something like this:
        //newid = db.patients.Max(u => patientid1) + 1;
        newid = db.patients.Max(u => Int32.Parse(u.patientid.Substring(1))) + 1;
        //LOOK HERE: newid is defined as int. It can't be changed to string.
        //newid = Convert.ToString(newid);
        //newid = newid < 2, + "0"; 
        //newid = (p + patientid1);
    }
    patient newpatient = new patient();
    //LOOK HERE: newid is a variable, not a page parameter
    //newpatient.patientid = Convert.ToString(Request.Params["newid"]);
    //LOOK HERE: Look at String.format - this is your key to the leading zeros
    newpatient.patientid = String.Format("P{0:00}", newid);
    newpatient.doctorno = Convert.ToInt16(Request.Params["doctorno"]);
    newpatient.wardno = Request.Params["wardno"];
    newpatient.patientname = Request.Params["patientname"];
    newpatient.address = Request.Params["address"];
    newpatient.gender = Request.Params["gender"];
    newpatient.bloodtype = Request.Params["bloodtype"];
    newpatient.spam = Convert.ToBoolean(Request.Params["spam"]);
    newpatient.organs = Convert.ToBoolean(Request.Params["organs"]);
    db.AddTopatients(newpatient);
    db.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...