第二次单击后,C#不会保存到数据库
所以我的程序正常工作。单击“保存”按钮时,所有内容都保存到数据库中。但是,当我第二次单击“保存”按钮时,该按钮无法工作。索引超出了数组的边界。是private void btnTest_click on line string Ullage=splitstring[2]中的错误第二次单击后,C#不会保存到数据库,c#,database,C#,Database,所以我的程序正常工作。单击“保存”按钮时,所有内容都保存到数据库中。但是,当我第二次单击“保存”按钮时,该按钮无法工作。索引超出了数组的边界。是private void btnTest_click on line string Ullage=splitstring[2]中的错误 private void btnSave_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnect
private void btnSave_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\2014-06-26 TEK687 Config Tool\TEK687 Config Tool\bin\Debug\Results.mdb");
string SqlString = "insert into Table1 (PassOrFail,DateTested,TekNum,BatchNum,WeekNum,Serial,FirmwareVer,HardwareVer,TestPC,SettingsTest,Deleted,Ullage,SRC,Vbatt,Tamb,Ullage2,SRC2,Vbatt2,Tamb2) Values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
using (OleDbCommand cmd = new OleDbCommand(SqlString, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("PassOrFail", txtPassFail.Text);
cmd.Parameters.AddWithValue("DateTested", txtDateTested.Text);
cmd.Parameters.AddWithValue("TekNum", txtTekPartNo.Text);
cmd.Parameters.AddWithValue("BatchNum", txtBatchNumber.Text);
cmd.Parameters.AddWithValue("WeekNum", txtWeekYearNo.Text);
cmd.Parameters.AddWithValue("Serial", txtSerialNumber.Text);
cmd.Parameters.AddWithValue("FirmwareVer", txtFirmwareVer.Text);
cmd.Parameters.AddWithValue("HardwareVer", txtHardwareVer.Text);
cmd.Parameters.AddWithValue("TestPC", txtTestPC.Text);
cmd.Parameters.AddWithValue("SettingsTest", cboSettingsProfiles.SelectedIndex);
cmd.Parameters.AddWithValue("Deleted", txtDeleted.Text);
cmd.Parameters.AddWithValue("Ullage", txtUllage1.Text);
cmd.Parameters.AddWithValue("SRC", txtSRC1.Text);
cmd.Parameters.AddWithValue("Vbatt", txtVbatt1.Text);
cmd.Parameters.AddWithValue("Tamb", txtTamb1.Text);
cmd.Parameters.AddWithValue("Ullage2", txtUllage2.Text);
cmd.Parameters.AddWithValue("SRC2", txtSRC2.Text);
cmd.Parameters.AddWithValue("Vbatt2", txtVbatt2.Text);
cmd.Parameters.AddWithValue("Tamb2", txtTamb2.Text);
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Data stored successfully");
}
ClearTextBoxes(this);
}
下面是向数据库添加值的代码错误位于string Ullage=splitstring[2]强>
private void btnTest_Click(object sender, EventArgs e)
{
Cancel = false;
if (DiscoverDevice(false) == false)
{
MessageBox.Show("Error, device is not responding");
return;
}
string servo = "";
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse("TL,S," + txtToolID.Text + ",30,\r\n", "\r\n", 4, ref servo, 500);
string test = "";
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse("TL,T," + txtToolID.Text + "\r\n", "\r\n", 4, ref test, 500);
string[] splitstring = test.Split(',');
**string Ullage = splitstring[2];**
string SRC = splitstring[3];
string RSSI = splitstring[4];
string AlarmStatus = splitstring[5];
string RateofChange = splitstring[6];
string Tamb = splitstring[7];
string Vbatt = splitstring[8];
Ullage = Ullage.Replace("u:", "");
Tamb = Tamb.Replace("t:", "");
Vbatt = Vbatt.Replace("v:", "");
int Ull = Convert.ToInt32(Ullage);
int src = Convert.ToInt32(SRC);
int BV = Convert.ToInt32(Vbatt);
int temp = Convert.ToInt32(Tamb);
StringBuilder sb = new StringBuilder();
sb.Append(Ull);
txtUllage1.Text += sb.ToString();
StringBuilder sc = new StringBuilder();
sc.Append(src);
txtSRC1.Text += sc.ToString();
StringBuilder sd = new StringBuilder();
sd.Append(BV);
txtVbatt1.Text += sd.ToString();
StringBuilder se = new StringBuilder();
se.Append(temp);
txtTamb1.Text += se.ToString();
StringBuilder sm = new StringBuilder();
if ((Ull < 11) || (Ull > 13) || (src < 9) || (BV < 29))
{
txtPassFail.Text += "12cm FAIL";
txtResultsReading.Font = new Font(txtResultsReading.Font, FontStyle.Bold);
StringBuilder th = new StringBuilder();
th.Append("12cm FAIL");
txtResultsReading.Text += th.ToString();
}
string servoTwo = "";
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse("TL,S," + txtToolID.Text + ",31,\r\n", "\r\n", 4, ref servoTwo, 500);
string tests = "";
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse("TL,T," + txtToolID.Text + "\r\n", "\r\n", 4, ref tests, 500);
string[] splitstrings = tests.Split(',');
string Ullage2 = splitstrings[2];
string SRC2 = splitstrings[3];
string RSSI2 = splitstrings[4];
string AlarmStatus2 = splitstrings[5];
string RateofChange2 = splitstrings[6];
string Tamb2 = splitstrings[7];
string Vbatt2 = splitstrings[8];
Ullage2 = Ullage2.Replace("u:", "");
Tamb2 = Tamb2.Replace("t:", "");
Vbatt2 = Vbatt2.Replace("v:", "");
int Ull2 = Convert.ToInt32(Ullage2);
int src2 = Convert.ToInt32(SRC2);
int BV2 = Convert.ToInt32(Vbatt2);
int temp2 = Convert.ToInt32(Tamb2);
StringBuilder sf = new StringBuilder();
sf.Append(Ull2);
txtUllage2.Text += sf.ToString();
StringBuilder sg = new StringBuilder();
sg.Append(src2);
txtSRC2.Text += sg.ToString();
StringBuilder sh = new StringBuilder();
sh.Append(BV2);
txtVbatt2.Text += sh.ToString();
StringBuilder si = new StringBuilder();
si.Append(temp2);
txtTamb2.Text += si.ToString();
txtDateTested.Text = DateTime.Now.ToString();
txtTestPC.Text = System.Environment.UserName;
//boSettingsProfiles.Text= Settings.SettingsFile;
txtDeleted.Text = "CURRENT";
if ((Ull < 11) || (Ull > 13) || (src < 9) || (BV < 29))
{
txtPassFail.Text += " 3M FAIL";
txtResultsReading.Font = new Font(txtResultsReading.Font, FontStyle.Bold);
StringBuilder tg = new StringBuilder();
tg.Append(Environment.NewLine);
tg.Append("3M FAIL");
txtResultsReading.Text += tg.ToString();
}
else if ((Ull >= 11) && (Ull <= 13) && (src == 9) && (BV >= 29) &&
(Ull2 >= 11) && (Ull2 <= 13) && (src2 == 9) && (BV2 >= 29))
{
txtPassFail.Text += "PASS";
txtResultsReading.Font = new Font(txtResultsReading.Font, FontStyle.Bold);
txtResultsReading.Text += "PASS";
}
ReleaseDevice();//release the config tool after config is completed
}
}
private void btnTest\u单击(对象发送方,事件参数e)
{
取消=假;
如果(发现设备(错误)=错误)
{
MessageBox.Show(“错误,设备没有响应”);
返回;
}
字符串伺服=”;
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse(“TL,S,+txtToolID.Text+”,30,\r\n“,“\r\n”,4,ref伺服,500);
字符串测试=”;
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse(“TL,T,+txtToolID.Text+”\r\n“,“\r\n”,4,ref test,500);
string[]splitstring=test.Split(',');
**字符串损耗=拆分字符串[2]**
string SRC=splitstring[3];
字符串RSSI=拆分字符串[4];
字符串AlarmStatus=splitstring[5];
string RateofChange=拆分字符串[6];
字符串Tamb=splitstring[7];
字符串Vbatt=拆分字符串[8];
空距=空距。替换(“u:,”);
Tamb=Tamb.Replace(“t:,”);
Vbatt=Vbatt.Replace(“v:,”);
int Ull=转换为32(空距);
int src=Convert.ToInt32(src);
int BV=转换为32(Vbatt);
int temp=转换为NT32(Tamb);
StringBuilder sb=新的StringBuilder();
某人附加(Ull);
txtUllage1.Text+=sb.ToString();
StringBuilder sc=新的StringBuilder();
sc.Append(src);
txtSRC1.Text+=sc.ToString();
StringBuilder sd=新的StringBuilder();
sd.Append(BV);
txtVbatt1.Text+=sd.ToString();
StringBuilder se=新的StringBuilder();
附加(临时);
txtTamb1.Text+=se.ToString();
StringBuilder sm=新的StringBuilder();
如果((Ull<11)| |(Ull>13)| |(src<9)| |(BV<29))
{
txtPassFail.Text+=“12cm失败”;
txtResultsReading.Font=新字体(txtResultsReading.Font,FontStyle.Bold);
StringBuilder th=新的StringBuilder();
附加(“12厘米失败”);
txtResultsReading.Text+=th.ToString();
}
字符串2=“”;
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse(“TL,S,+txtToolID.Text+”,31,\r\n“,“\r\n”,4,ref servoTwo,500);
字符串测试=”;
MyModemSerialInterfaceLayer.WriteTextAndWaitForResponse(“TL,T,+txtToolID.Text+”\r\n“,“\r\n”,4,ref tests,500);
string[]splitstrings=tests.Split(',');
字符串Ullage2=拆分字符串[2];
string SRC2=splitstrings[3];
字符串RSSI2=拆分字符串[4];
字符串AlarmStatus2=拆分字符串[5];
string RateofChange2=拆分字符串[6];
字符串Tamb2=拆分字符串[7];
字符串Vbatt2=拆分字符串[8];
Ullage2=Ullage2.替换(“u:,”);
Tamb2=Tamb2。替换(“t:,”);
Vbatt2=Vbatt2。替换(“v:,”);
int Ull2=转换为32(Ullage2);
int src2=Convert.ToInt32(src2);
int BV2=转换为32(Vbatt2);
int temp2=转换为32(Tamb2);
StringBuilder sf=新的StringBuilder();
补充(Ull2);
txtUllage2.Text+=sf.ToString();
StringBuilder sg=新的StringBuilder();
sg.Append(src2);
txtSRC2.Text+=sg.ToString();
StringBuilder sh=新的StringBuilder();
sh.Append(BV2);
txtVbatt2.Text+=sh.ToString();
StringBuilder si=新的StringBuilder();
si.Append(temp2);
txtTamb2.Text+=si.ToString();
txtDateTested.Text=DateTime.Now.ToString();
txtTestPC.Text=System.Environment.UserName;
//boSettingsProfiles.Text=Settings.Settings文件;
txtdelected.Text=“当前”;
如果((Ull<11)| |(Ull>13)| |(src<9)| |(BV<29))
{
txtPassFail.Text+=“3M失败”;
txtResultsReading.Font=新字体(txtResultsReading.Font,FontStyle.Bold);
StringBuilder tg=新的StringBuilder();
tg.Append(Environment.NewLine);
tg.追加(“3M失败”);
txtResultsReading.Text+=tg.ToString();
}
如果((Ull>=11)和&(Ull=29),则为else&&
(Ull2>=11)和&(Ull2=29))
{
txtPassFail.Text+=“通过”;
txtResultsReading.Font=新字体(txtResultsReading.Font,FontStyle.Bold);
txtResultsReading.Text+=“通过”;
}
ReleaseDevice();//配置完成后释放配置工具
}
}
检查WriteText和WaitForResponse调用中的变量。它可能没有3个逗号。您的splitstrings
对象中没有三个对象,因此您无法访问索引2处的对象。因此,在访问之前,您应该实现一个检查,以确保它在该索引处包含一个对象,然后根据需要处理它不包含的情况
顺便说一句,下次当你问一个为什么有些东西不起作用的问题时,你最好告诉我们你遇到的异常情况,而不是让我们去问。您需要包含引发异常的代码。请参阅。是否有错误?或者它是否第二次到达您的代码?索引超出了数组的界限就是错误。但是,当我第一次单击按钮时,它可以正常工作。错误发生在哪一行?请提供完整的错误消息,并指出错误所在的行,以便进一步帮助您。连接创建也应在
块中使用进行。string Ullage=splitstring[2];清除错误