无法解析与 - &#34相关的int;无法将类型字符串隐式转换为int"

时间:2013-11-25 21:39:31

标签: c#

我是C#的新手,我知道这个问题已被广泛讨论,但无论如何,我都会接受它。我无法弄清楚为什么我的解析不起作用。我在一个表单上有一个文本框控件,我从另一个类访问,但我不断得到上面提到的错误,不知道为什么。

这是我的代码:

public partial class Edit : XtraForm
{
    public int _PatientID;
    public string _FirstName;
    public string _LastName;
    public string _Address;
    public string _City;
    public string _State;
    public string _ZipCode;
    public string _Phone;

    public Edit(int _PatientID, string _FirstName, string _LastName,
                string _Address, string _City, string _State,
                string _ZipCode, string _Phone)
    {
        InitializeComponent();

        // This is the line I am talking about
        _PatientID = Convert.ToInt32(txtPatientID.Text);

        _FirstName = txtFirstName.Text;
        _LastName = txtLastName.Text;
        _Address = txtAddress.Text;
        _City = txtCity.Text;
        _State = txtState.Text;
        _ZipCode = txtZipCode.Text;
        _Phone = txtPhone.Text;
    }

    public class PatientService 
    {
        Edit ed = new Edit(_PatientID, _FirstName, _LastName, _Address,
                           _City, _State, _ZipCode, _Phone);

        SACommand cmd = new SACommand
             (@"INSERT INTO patient(patient_id, first_name, last_name,
                                    address, city, state, zipcode, phone) 
             VALUES ('" 
             + _PatientID + "','" 
             + _FirstName + "','"
             + _LastName + "','"
             + _Address + "','"
             + _City + "','"
             + _State + "','"
             + _ZipCode + "','"
             + _Phone + "');");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        MessageBox.Show("A new patient has been inserted");
        conn.Close();
     }

我真的很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

一些问题:

正如评论所说,不要使用直接sql,尝试参数,会给你额外的安全性(这里有一个小页面可以让你先行一步:http://www.dotnetperls.com/sqlparameter)。

另一个:使用C#属性,而不是公共字段。这是C# Programming Guide页面。

如果要将字符串解析为int,Convert.ToInt32(string)应该可以工作,但它可能会引发异常。从MSDN

看一下
  

使用ToInt32(String)方法相当于将值传递给Int32.Parse(String)方法。通过使用当前线程文化的格式约定来解释值。   如果您希望在转换失败时不处理异常,则可以调用Int32.TryParse方法。它返回一个布尔值,指示转换是成功还是失败。

因此,如果您想要缓解异常(并且可能使用默认值),则可以尝试TryParse

就你的代码而言,它应该工作......你能在那里放一个断点,看看txtPatientID.Text的价值是多少?