Ashutosh_jha Ответов: 2

А как же я?.. Пожалуйста, помогите мне


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;

namespace PRESCRIPTION_WRITER
{
    public partial class Medicine_Master : Form
    {
        
        CLSMedicine objMedi = new CLSMedicine();
        public Medicine_Master()
        {
            InitializeComponent();
           BindCat();
           
        }
      
        private void BindCat()
        {
            DataTable dt = objMedi.CreateTempTable(objMedi.GetReport2());

            DataRow dr;
            dr = dt.NewRow();
            dr["Short_Name"] = "--Select--";
            dr["Category_ID"] = "-1";
            dt.Rows.InsertAt(dr, 0);
            ddl_Category.DataSource = dt;

            ddl_Category.SelectedIndex = 0;
            ddl_Category.DisplayMember = "Short_Name";
            ddl_Category.ValueMember = "Category_ID";               
        }

        private void BindUnit(int Category_ID)
        {
            DataTable dt = objMedi.CreateTempTable(objMedi.GetReport1());

            DataRow dr;
            dr = dt.NewRow();
            dr["Unit_name"] = "--Select--";
            dr["Unit_ID"] = "-1";
            dt.Rows.InsertAt(dr, 0);
            ddl_Category.DataSource = dt;

            ddl_Unit.SelectedIndex = -1;
            ddl_Unit.DisplayMember = "Unit_name";
            ddl_Unit.ValueMember = "Unit_ID";
        }
      

        private void ddl_Category_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddl_Category.SelectedIndex.ToString() != "-1")
            {

        objMedi .Category_ID  = Convert.ToInt32(ddl_Category.SelectedValue.ToString());  
                BindUnit(objMedi.Category_ID);  
              
            }
        }
     
 
    }  
  
        }
                     
        
    
and Class files code is :::

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;

namespace PRESCRIPTION_WRITER
{
    class CLSMedicine
    {string Constr = System.Configuration.ConfigurationManager.AppSettings["constr"].ToString();
        private string _Medicine_name, _Generic_Name, _Strength;
        private int _ID, _Unit_ID, _Category_ID;
        public int  ID
        {
            get { return _ID; }
            set { _ID = value; }
        }

        public string Medicine_name
        {
            get { return _Medicine_name; }
            set { _Medicine_name = value; }
        }
        public string Generic_Name
        {
            get { return _Generic_Name; }
            set { _Generic_Name = value; }
        }
        public string Strength
        {
            get { return _Strength; }
            set { _Strength = value; }
        }
        public int Unit_ID
        {
            get { return _Unit_ID; }
            set { _Unit_ID = value; }
        }
        public int Category_ID
        {
            get { return _Category_ID; }
            set { _Category_ID = value; }
        }

       
      
        public DataTable CreateTempTable(SqlDataReader oledr)
        {
            DataTable myTable = new DataTable();
            DataRow TableRow;
            //  myTable.Columns.Add(new DataColumn("SrNo.", typeof(string)));
            for (int intColumn = 0; intColumn < oledr.FieldCount; intColumn++)
            {
                myTable.Columns.Add(new DataColumn(oledr.GetName(intColumn).ToString(), typeof(string)));
            }
            while (oledr.Read())
            {
                TableRow = myTable.NewRow();
                for (int intColumn = 0; intColumn < oledr.FieldCount; intColumn++)
                {
                    TableRow[oledr.GetName(intColumn).ToString()] = oledr[intColumn].ToString();
                }
                myTable.Rows.Add(TableRow);
            }
            return myTable;
        }
        public SqlDataReader GetReport()
        {
            SqlParameter[] pram = new SqlParameter[1];
            pram[0] = new SqlParameter("@type", 1);
            return SqlHelper.ExecuteReader(Constr, "Medi", CommandType.StoredProcedure, pram);

        }
        public SqlDataReader GetReport1()
        {
            SqlParameter[] pram = new SqlParameter[2];
            pram[0] = new SqlParameter("@type", 5);
            pram[1] = new SqlParameter("@Category_ID", Category_ID);
            return SqlHelper.ExecuteReader(Constr, "Medi", CommandType.StoredProcedure, pram);

        }
        public SqlDataReader GetReport2()
        {
            SqlParameter[] pram = new SqlParameter[1];
            pram[0] = new SqlParameter("@type", 5);
            return SqlHelper.ExecuteReader(Constr, "Uni", CommandType.StoredProcedure, pram);

        }
        public int MedicineInsert()
        {

            try
            {
                SqlParameter[] pram = new SqlParameter[6];
                pram[0] = new SqlParameter("@Medicine_name", Medicine_name);
                pram[1] = new SqlParameter("@Generic_Name", Generic_Name );
                pram[2] = new SqlParameter("@Strength", Strength );
                pram[3] = new SqlParameter("@Unit_ID", Unit_ID);
                pram[4] = new SqlParameter("@Category_ID", Category_ID);
                pram[5] = new SqlParameter("@Type", 2);
                return SqlHelper.ExecuteNonQuery(Constr, "Medi", CommandType.StoredProcedure, pram);
            }
            catch
            {
                return -1;
            }
            finally
            {


            }
        }
        public int MedicineDelete()
        {

            SqlParameter[] pram = new SqlParameter[2];

            pram[0] = new SqlParameter("@Type", 4);
            pram[1] = new SqlParameter("@ID", ID);
            return SqlHelper.ExecuteNonQuery(Constr, "Medi", CommandType.StoredProcedure, pram);

        }
        public int MedicineUpdate()
        {
            SqlParameter[] pram = new SqlParameter[7];
            pram[0] = new SqlParameter("@Medicine_name", Medicine_name);
            pram[1] = new SqlParameter("@Generic_Name", Generic_Name);
            pram[2] = new SqlParameter("@Strength", Strength);
            pram[3] = new SqlParameter("@Unit_ID", Unit_ID);
            pram[4] = new SqlParameter("@Category_ID", Category_ID);
            pram[5] = new SqlParameter("@Type", 3);
            pram[6] = new SqlParameter("@ID", ID);
            return SqlHelper.ExecuteNonQuery(Constr, "Medi", CommandType.StoredProcedure, pram);

        }
    }
}





Ошибка показывает, что"входная строка была не в правильном формате."

Что я уже пробовал:

Я хочу использовать ComboBox и после этого втором поле со списком заполнения.
Дизайн стола
"Категория"
Category_ID инт снят
Category_name nvarchar(50) Проверен
Short_Name nvarchar(50) Проверен
Непроверенный
И
"Единица измерения"
Unit_ID инт снят
Unit_name nvarchar(50) Проверен
Category_ID int проверено
Непроверенный

Пожалуйста, Помогите Мне..

lmoelleb

Запустите отладчик, чтобы вы могли видеть точную строку, на которой он выходит из строя, а затем погуглите сообщение об ошибке, если оно не ясно из местоположения и значений переменных (да, даже американские профессионалы делают это на более неясных ошибках). Если это не решает проблему, сделайте меньший мир кода, который воспроизводит проблему, а затем разместите его в вопросе, используя правильное форматирование, чтобы мы могли его прочитать.
В общем, отладка - это основной навык, которому нужно научиться-вы потратите больше времени на отладчик, чем на ввод кода... чтобы сделать обучение приоритетом.

2 Ответов

Рейтинг:
1

Patrice T

Цитата:
Ошибка показывает, что"входная строка была не в правильном формате."

Если вы посмотрите внимательно, он также скажет вам, где проблема находится в вашем коде.
Сообщение об ошибке говорит вам, что проблема заключается в содержимом входной строки, а не в вашем коде, мы не можем догадаться, что находится во входной строке или где появляется проблема.
-----
Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]

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


Рейтинг:
0

OriginalGriff

Посмотрите на сообщение об ошибке:

Input string was not in a correct format
Это означает, что вы пытаетесь изменить строковое значение на что-то другое, возможно, целое число или дату-время.
Я замечаю, что ваш код, похоже, отвечает на укусы, часто используя ToString для сравнения значений со строковыми числами:
if (ddl_Category.SelectedIndex.ToString() != "-1")
А это глупо:
if (ddl_Category.SelectedIndex >= 0)
это легче читать и более эффективно.
А тут еще вот это:
objMedi .Category_ID = Convert.ToInt32(ddl_Category.SelectedValue.ToString());
Поскольку ValueMember-это Category_ID - целое число, то зачем вообще возиться со строками?

Я бы посоветовал вам выбросить код построения таблицы и прочитать ваши данные из БД непосредственно в DataTable с помощью DataAdapter и использовать его в качестве источника данных. Таким образом, данные, которые Вы читаете из своего выпадающего списка, уже могут быть числовыми, и вам не нужно с ними возиться.