2013-07-09 3 views
0

Я хочу вставить запись в базу данных с помощью ComboBox. ComboBox подключается к другой таблице, и это ошибка:«Ошибка преобразования типа данных nvarchar в числовой».

Error converting data type nvarchar to numeric.

private void InsertReceipt() 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandText = "INSERT INTO Ticket(CustomerID, Date, Store, Amount, NoStub)" + 
         "VALUES (@CustomerID, @Date, @Store, @Amount, @NoStub) "; 
    cmd.Parameters.AddWithValue("@CustomerID", cboName.SelectedValue); 
    cmd.Parameters.AddWithValue("@Date", dtpDate.Value.Date.ToString()); 
    cmd.Parameters.AddWithValue("@Store", txtStore.Text); 
    cmd.Parameters.AddWithValue("@Amount", txtAmount.Text); 
    cmd.Parameters.AddWithValue("@NoStub", txtStub.Text); 
    cmd.ExecuteNonQuery(); 
} 

void GetRecords2() 
{ 
    SqlCommand cmd = new SqlCommand(); 
    cmd.Connection = cn; 
    cmd.CommandText = "SELECT CustomerID, firstname + ', ' + lastname AS Name FROM Customer"; 

    SqlDataAdapter adp = new SqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    adp.Fill(ds, "Customer"); 

    cboName.DataSource = ds; 
    cboName.DisplayMember = "Customer.Name"; 
    cboName.ValueMember = "Customer.CustomerID"; 
} 
+2

Используйте Int.ParseInt (txtAmount.Text), чтобы сохранить его как число или Float.ParseFloat. Вы не дали схему, поэтому я угадываю. –

ответ

2

При вызове AddWithValue убедитесь, что тип данных, которые вы передаете соответствует типу столбца. Вот вероятный кандидат:

cmd.Parameters.AddWithValue("@Amount", txtAmount.Text); 

В этой строке вы передаете текстовую строку, к чему-то, что явно хочет числовое значение (количество). Вы должны разобрать txtAmount.Text в виде десятичной дроби, а затем передать это значение:

decimal amount = decimal.Parse(txtAmount.Text); 
cmd.Parameters.AddWithValue("@Amount", amount); 

С помощью этого кода, вы все равно можете получить исключение, если строка в txtAmount.Text не может быть разобрано в десятичной системе, но, по крайней мере, тогда вы узнаете, какое значение вызывает проблему. Вы можете/должны сделать то же самое с другими значениями, чтобы убедиться, что они соответствуют типам столбцов.

0

try string.isNullorEmpty (txtAmount.text);

-1
private void button1_Click(object sender, EventArgs e) 
     { 
      string sql; 
      sql = "insert into slab (date,sober_visor,tesh,shift,group,heat_no,st_grade,thick,width,length,location,pcs,remarkes,slab_no) values (@date,@sober_vsor,@tesh,@shift,@group,@heat_no,@st_grade,@thick,@width,@length,@loction,@pcs,@slab_no);select scope_identity()"; 

      SqlCommand cmd = new SqlCommand(sql, con); 
      cmd.Parameters.AddWithValue("@date", txt_date.Text); 
      cmd.Parameters.AddWithValue("@sober_visor", com_sober_visor.ToString()); 
      cmd.Parameters.AddWithValue("@shift", txt_shift.Text); 
      cmd.Parameters.AddWithValue("@heat_no", txt_heat_no.Text); 
      cmd.Parameters.AddWithValue("@thick", txt_shift.Text); 
      cmd.Parameters.AddWithValue("@width", txt_heat_no.Text); 
      cmd.Parameters.AddWithValue("@length", txt_length.Text); 
      cmd.Parameters.AddWithValue("@pcs", txt_pcs.Text); 
      cmd.Parameters.AddWithValue("@st_grade", txt_st_gread.Text); 
      cmd.Parameters.AddWithValue("@location", txt_loction.Text); 
      cmd.Parameters.AddWithValue("@slab_no", txt_slab_no.Text); 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
      txt_heat_no.Text = cmd.ExecuteScalar().ToString(); 

      con.Close(); 
      MessageBox.Show("تمت عملية الإضافة"); 
     } 
    } 
} 
+1

Вы опубликовали совершенно другой код и без каких-либо объяснений. – mmushtaq

Смежные вопросы