从文本框向数据库添加新记录时出错

时间:2013-02-06 14:26:30

标签: c# winforms

将数据保存到数据库时出错。 DataAdapter.Fill(ds,“Table”)在将数据类型nvarchar转换为numeric时抛出SqlException错误。

private void btnSave_Click_1(object sender, EventArgs e)
{
    da = new SqlDataAdapter();
    da.SelectCommand = new SqlCommand("select * from Measurement where ID = @ID", con);
    da.SelectCommand.Parameters.AddWithValue("@ID", txtID.Text);
    SqlCommandBuilder cb = new SqlCommandBuilder(da);
    da.Fill(ds, "Measurement"); //(SqlException Unhandled)Error converting data type nvarchar to numeric.

    if (String.IsNullOrEmpty(txtCellNo.Text.Trim()))
    {
        MessageBox.Show("Please enter Cell Number");
    }
    else
    {
        try
        {
            dr = ds.Tables["Measurement"].Rows[0];

            dr["CellNumber"] = txtCellNo.Text.Trim();
            dr["FirstName"] = txtFirstName.Text;
            dr["LastName"] = txtLastName.Text;
            dr["Shirt"] = txtShirt.Text;
            dr["Pant"] = txtPant.Text;
            dr["DueDate"] = txtDueDate.Text;
            dr["Date"] = txtDate.Text;

            cb.GetUpdateCommand();
            da.Update(ds, "Measurement");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您将@ID作为字符串传递给数据库(从数据库角度看nvarchar)。在设置txtID.Text命令参数时,需要将@ID转换/转换为适当的数值。我怀疑你需要调用int.Parse(txtID.Text)(假设ID是数据库中的整数)。

另外,您可能还需要防止在txtID.Text中输入无效ID。在这种情况下,您可以使用:

int id;
if (!int.TryParse(txtID.Text, out id))
{
    //an invalid id was supplied so stop processing and warn user
}

答案 1 :(得分:0)

这一行:

da.SelectCommand.Parameters.AddWithValue("@ID",txtID.Text);

txtID.Text是一个需要转换为整数的字符串。见Int.TryParse

答案 2 :(得分:0)

看起来txtID.Text可能不是整数。你应该先转换它。尝试:

da.SelectCommand.Parameters.AddWithValue("@ID",Convert.ToInt32(txtID.Text));