我是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();
}
我真的很感激任何帮助。
答案 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
的价值是多少?