2013-07-09 106 views
0

我想用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

尝试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

相关问题