Atul Rokade Ответов: 2

Как вставить числовое значение в таблицу доступа


Всем привет,

Последние 20 дней я пытаюсь вставить числовое значение в базу данных access, но я не могу вставить его оставшиеся два строковых значения вставлены успешно, но это числовое значение я не могу вставить все детали я вставляю с помощью datagridview и кода, написанного на событии dataGridView1_RowLeave

моя структура таблицы такова
Med_id- - - - & gt; автономер
Medicine_Name - - - - & gt; памятка
Dealer_name-- - - & gt;текст
Доступность - - - - - > номер

пожалуйста, друзья, помогите мне, я сейчас совершенно устала, чтобы делать различные рнд

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

 try
            {

            if (dataGridView1.IsCurrentRowDirty)
            {
                string connectionString = null;
                connectionString = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;
                con.ConnectionString = connectionString;

                string cmd1 = "insert into Medicine_Available_Detail(Medicine_Name,Dealer_name,Availability) values(?,?,@Availability)";
                OleDbCommand cmd = new OleDbCommand(cmd1, con);

                cmd.CommandType = CommandType.Text;

                string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString();
                cmd.Parameters.AddWithValue("@Medicine_Name", Medicine_Name);

                string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString();
                cmd.Parameters.AddWithValue("@Dealer_name", Dealer_name);
//i reomve now try catch now its showing me exception Object cannot be cast from DBNull to other types. on below line 
  int Availability =Convert.ToInt32 (dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value);//this line 
                cmd.Parameters.AddWithValue("@Availability", Availability);
// i event try below code also but debugger always go else 
 //int Availability = 0;
                //bool total_availablehasvalue = int.TryParse(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString(), out Availability);
                //if (total_availablehasvalue)
                //{
                //    cmd.Parameters.AddWithValue("@Availability", Availability);
                //}
                //else
                //{
                //    cmd.Parameters.AddWithValue("@Availability", DBNull.Value);
                //}

                con.Open();
                int n = cmd.ExecuteNonQuery();
                con.Close();
                if (n > 0)
                {

                    MessageBox.Show("Data Inserted Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information);


                }

            }
            }
            catch (Exception ex)
            {

            Load_data();
            dataGridView1.Refresh();

           }


        }

Загружать данные()
public void Load_data()
  {
       OleDbCommand cmd = con.CreateCommand();
          cmd.CommandType = CommandType.Text;
          cmd.CommandText = "select Medicine_Name,Dealer_name,Availability from Medicine_Available_Detail";
          DataTable dt = new DataTable();
          OleDbDataAdapter adapater = new OleDbDataAdapter(cmd);
          adapater.Fill(dt);
          dataGridView1.DataSource = dt;

      }

OriginalGriff

И что?
Что происходит, когда вы используете этот код?

Atul Rokade

он ничего не показывает я тоже использовал degugger но он показывает мне нулевое значение когда отладчик идет на этот код

OriginalGriff

Где он показывает нуль?

Atul Rokade

@OriginalGriff : сэр, я улучшил вопрос

Atul Rokade

инт наличии;

bool accountHasValue = int.Метод tryparse(dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["Доступность"]. Значение.ToString (), Out Availability);

если (accountHasValue)
{
УМК.Параметры.AddWithValue ("@Availability", Доступность);
}
ещё
{
УМК.Параметры.AddWithValue ("@Availability", DBNull.Ценность);
}
этот код я использовал в другом приложении для datagridview, он работает нормально, но тот же код, который я вставил в это приложение, - go cmd.Parameters.AddWithValue ("@Availability", DBNull.Ценность);

Atul Rokade

Сэр, вы можете мне помочь, как я могу хранить целое число ? какой-нибудь код или какое-нибудь предложение ?

Michael_Davies

Вы не называете параметры medicine_name или dealer_name в строке вставки, которую используете ? для обоих из них затем назовите доступность.

строка cmd1 = " вставить в medicine_available_detail (Medicine_Name,Dealer_name,Availability) значения (?,?,@Availability)";

Попробуй

строка cmd1 = " вставить в medicine_available_detail (Medicine_Name,Dealer_name,Availability) значения (@Medicine_Name,@Dealer_name,@Availability)";

Даже если это не решает проблему, это делает ее более читабельной.


Atul Rokade

@Michael_Davies : сэр, я улучшил вопрос , но все та же ошибка

Michael_Davies

Выглядеть одинаково. Измените код, попробуйте его, а затем обновите.

Atul Rokade

не получаю сэр

2 Ответов

Рейтинг:
2

Atul Rokade

Здесь я получил решение и тонко вставил и обновил числовое значение

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
med_id = dataGridView1.Rows[e.RowIndex].Cells["Med_id"].Value.ToString();

if (med_id == "")
{
med_id1 = 0;
}
else
{
med_id1 = Convert.ToInt32( dataGridView1.Rows[e.RowIndex].Cells["Med_id"].Value.ToString());

}
if (med_id1 == 0)
{
try
{
string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString();
string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString();
int Availability = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString());
string cmd1 = "insert into Medicine_Available_Detail(Medicine_Name,Dealer_name,Availability) values(@Medicine_Name,@Dealer_name,@Availability)";
OleDbCommand cmd = new OleDbCommand(cmd1, con);

cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Medicine_Name", Medicine_Name);
cmd.Parameters.AddWithValue("@Dealer_name", Dealer_name);
cmd.Parameters.AddWithValue("@Availability", Availability);
con.Open();
int n = cmd.ExecuteNonQuery();
con.Close();
if (n > 0)
{

MessageBox.Show("Data Inserted Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information);


}
Load_data();
dataGridView1.Refresh();
}
catch (Exception ex)
{

}


}
else
{
string Medicine_Name = dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString();
string Dealer_name = dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString();
int Availability = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString());
cmd = new OleDbCommand();

cmd.CommandType = CommandType.Text;
cmd = con.CreateCommand();
cmd.CommandText = "update Medicine_Available_Detail set Medicine_Name='" + dataGridView1.Rows[e.RowIndex].Cells["Medicine_Name"].Value.ToString() + "',Dealer_name='" + dataGridView1.Rows[e.RowIndex].Cells["Dealer_name"].Value.ToString() + "',Availability='" + Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value.ToString())+ "'where Med_id=" + med_id1 + "";
con.Open();
int n = cmd.ExecuteNonQuery();
con.Close();
if (n > 0)
{

MessageBox.Show("Data Updated Successfully", "Data Inserted ", MessageBoxButtons.OK, MessageBoxIcon.Information);


}
Load_data();
dataGridView1.Refresh();

}
}


Рейтинг:
0

OriginalGriff

"я reomve теперь попробуйте поймать сейчас его показывает мне исключение объект не может быть брошен из DBNull в другие типы."
И вот в чем проблема: если ваши данные не содержат значения, вам нечего вставить в таблицу.
Вы можете обойти его, вставив " значение по умолчанию":

object o = dataGridView1.Rows[e.RowIndex].Cells["Availability"].Value;
int availability = o == DBNull.Value ? -1 : (int) o;

Но что вам действительно нужно сделать, так это посмотреть на свой источник данных и выяснить, почему ваша БД содержит null в поле, которое, как вы ожидаете, будет содержать целое число. Пока вы не разберетесь с этим, эта проблема будет повторяться.
Мы не можем сделать это за вас - у нас нет доступа к вашим данным!


Atul Rokade

OrginalGriff: сэр, когда я использовал ваш код
объект o = dataGridView1. Rows[e.Параметр rowindex].Ячейки ["Доступность"]. Значение;
int availability = o = = DBNull.Ценность ? -1 : (инт)о;
УМК.Параметры.AddWithValue ("@Availability", o);

это дает мне, что вы должны ввести значение в ' Medicine_Available_Detail.Поле "доступность". исключение на int n = cmd.ExecuteNonQuery (); строка

OriginalGriff

:вздыхать:
Вы должны думать, а не просто слепо заменять код...
Как вы думаете, почему я преобразовал его в целое число?

Atul Rokade

инт наличии;

bool accountHasValue = int.Метод tryparse(dataGridView1.Ряды[электронный.Параметр rowindex].Ячейки ["Доступность"]. Значение.ToString (), Out Availability);

если (accountHasValue)
{
УМК.Параметры.AddWithValue ("@Availability", Доступность);
}
ещё
{
УМК.Параметры.AddWithValue ("@Availability", DBNull.Ценность);
}
этот код я использовал в другом приложении для datagridview, он работает нормально, но тот же код, который я вставил в это приложение, - go cmd.Parameters.AddWithValue ("@Availability", DBNull.Ценность);

OriginalGriff

Ваша" новая " таблица БД требует ненулевого значения в столбце Availabity, да?
Ваша старая таблица содержит нулевые значения. Так что либо вам нужно починить свою старую таблицу,либо решиться на "разумную" вещь, чтобы сделать с вами null. Я не могу сделать это для тебя!

Atul Rokade

ok @OriginalGriff сэр на самом деле я устал от разных типов, но все равно потерпел неудачу, так что вот почему я расстроился